与问题here类似,我有三个任意的一维数组,例如:
x_p = np.array((0.0,1.1, 2.2, 3.3, 4.4))
y_p = np.array((5.5,6.6,7.7))
z_p = np.array((8.8, 9.9))我需要
points = np.array([[0.0, 5.5, 8.8],
[1.1, 5.5, 8.8],
[2.2, 5.5, 8.8],
...
[4.4, 7.7, 9.9]])1)第一个索引的变化速度2)点是浮点坐标,而不是整数索引。3)我注意到从1.7.0版本开始,numpy.meshgrid已经用默认的indexing='xy'改变了行为,需要使用
np.vstack(np.meshgrid(x_p,y_p,z_p,indexing='ij')).reshape(3,-1).T
为了得到上一个索引变化很快的结果点,这不是我想要的。(只在1.7.0版本中提到过,meshgrid支持dimension>2,我没有检查)
发布于 2017-07-30 02:26:41
我通过一些试验和错误发现了这一点。
我认为ij v xy索引已经在meshgrid中存在了很久了(更新的是sparse参数)。它只会影响3个返回元素的顺序。
为了让x_p变化最快,我把它放在参数列表的最后,然后使用::-1来颠倒末尾的列顺序。
我在最后使用了stack将数组连接到一个新的轴上,所以我不需要转置。但是重塑和转置都是很便宜的(在时间上)。因此,它们可以以任何有效且可以理解的组合使用。
In [100]: np.stack(np.meshgrid(z_p, y_p, x_p, indexing='ij'),3).reshape(-1,3)[:,::-1]
Out[100]:
array([[ 0. , 5.5, 8.8],
[ 1.1, 5.5, 8.8],
[ 2.2, 5.5, 8.8],
[ 3.3, 5.5, 8.8],
[ 4.4, 5.5, 8.8],
[ 0. , 6.6, 8.8],
...
[ 2.2, 7.7, 9.9],
[ 3.3, 7.7, 9.9],
[ 4.4, 7.7, 9.9]])https://stackoverflow.com/questions/45391740
复制相似问题