我想創建一個包含規則間隔點網格的三維座標的列表,每個網格都是一個3元素的元組。我正在尋找建議,以最有效的方式來做到這一點。在C++中,我只需循環三個嵌套循環,每個座標循環一次。在Matlab中,我可能會使用meshgrid函數(這可以在一個命令中完成)。我已經閱讀了Python中的meshgrid和mgrid,並且我也讀過使用numpy的廣播規則更高效。在我看來,將zip函數與numpy廣播規則結合使用可能是最有效的方式,但zip似乎不會在numpy中超載。規則間隔點的三維網格
3
A
回答
3
使用ndindex
:
import numpy as np
ind=np.ndindex(3,3,2)
for i in ind:
print(i)
# (0, 0, 0)
# (0, 0, 1)
# (0, 1, 0)
# (0, 1, 1)
# (0, 2, 0)
# (0, 2, 1)
# (1, 0, 0)
# (1, 0, 1)
# (1, 1, 0)
# (1, 1, 1)
# (1, 2, 0)
# (1, 2, 1)
# (2, 0, 0)
# (2, 0, 1)
# (2, 1, 0)
# (2, 1, 1)
# (2, 2, 0)
# (2, 2, 1)
1
多d(大於2)meshgrids,使用numpy.lib.index_tricks.nd_grid
像這樣:
import numpy
grid = numpy.lib.index_tricks.nd_grid()
g1 = grid[:3,:3,:3]
g2 = grid[0:1:0.5, 0:1, 0:2]
g3 = grid[0:1:3j, 0:1:2j, 0:2:2j]
其中G1具有的x值[0,1,2] 和g2的x值爲[0,.5], ,g3的x值爲[0.0,0.5,1.0](3j定義了步數而不是步增量,詳見documentation)
1
3
可以使用ogrid代替meshgrid和mgrid,該ogrid是mgrid的「稀疏」版本。也就是說,只有價值變化的維度被填充。其他的只是廣播。與非稀疏備選方案相比,這對大型網格使用的內存要少得多。
例如:
>>> import numpy as np
>>> x, y = np.ogrid[-1:2, -2:3]
>>> x
array([[-1],
[ 0],
[ 1]])
>>> y
array([[-2, -1, 0, 1, 2]])
>>> x**2 + y**2
array([[5, 2, 1, 2, 5],
[4, 1, 0, 1, 4],
[5, 2, 1, 2, 5]])
0
這裏是類似於你的C++解決方案,我已經用了完全一樣的目的,一個有效的選項:
import numpy, itertools, collections
def grid(xmin, xmax, xstep, ymin, ymax, ystep, zmin, zmax, zstep):
"return nested tuples of grid-sampled coordinates that include maxima"
return collections.deque(itertools.product(
numpy.arange(xmin, xmax+xstep, xstep).tolist(),
numpy.arange(ymin, ymax+ystep, ystep).tolist(),
numpy.arange(zmin, zmax+zstep, zstep).tolist()))
性能是最好的(在我的測試)當使用a.tolist()時,如上所示,但是您可以使用a.flat並放棄deque()以獲取將緩存內存的迭代器。當然,你也可以使用普通的舊元組()或列表()而不是deque()來輕微地降低性能(在我的測試中)。
相關問題
- 1. 在三維平面上生成規則點網格
- 2. 將不規則間距數據插值到三維網格
- 3. Highstock - 不規則的時間間隔
- 4. 不規則網格
- 5. 三維網格旋轉
- 6. 三維網格的三維形狀檢測
- 7. 非規則網格的雙三次插值?
- 8. 等長period.apply與R中不規則間隔的端點申請
- 9. matplotlib:三維圖中的網格
- 10. 三維網格中的塊拼接
- 11. 計算三維網格的表面積
- 12. 代表球體的三維網格
- 13. Matlab:將三角形網格轉換爲規則(正方形)網格
- 14. 不規則三角形頂點索引
- 15. 不規則網格插值到常規網格
- 16. 繪製三維地形網格
- 17. 計算不規則三維圓柱體的直徑分佈
- 18. 確定是否一組點位於一個規則的網格
- 19. 不規則網格的數據結構
- 20. Python,規則網格上的鄰居
- 21. 查找三維空間中三角形的點距離
- 22. OxyPlot中日期時間軸上的不規則間隔
- 23. 如何生成不規則的時間間隔?
- 24. 網格中三角形頂點之間的插值
- 25. 三角形網格中最近的點
- 26. 智能指針三規則?
- 27. 如何爲動態三維網格生成三角形數據
- 28. 計算N維網格中點之間的路徑數量?
- 29. 網格列之間的分隔符
- 30. 均勻間隔的圖像網格
您也可以使用numpy.mgrid,它只是numpy.lib.index_tricks.nd_grid的一個實例。 – rephorm 2012-06-19 17:37:15