我想创建一个包含规则间隔点网格的三维坐标的列表,每个网格都是一个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