用numpy重新排列网格点

时间:2015-12-17 19:39:18

标签: python arrays numpy

我有一个用坐标x,y,z描述的3D曲线网格。 x,y和z都是3D numpy数组。为了举个例子,我们可以说它们都有形状(20,9,10)。所以每个的大小是20 * 9 * 10 = 1800。我需要生成一个3x1800阵列(或1800x3,无论如何),它存储坐标如下:

    [ [x[0,0,0],y[0,0,0],z[0,0,0]],[x[0,0,1],y[0,0,1],z[0,0,1]], ....
 [x[19,8,9],y[19,8,9],z[19,8,9]]

我完成了这样的事情:

coordlist=np.zeros((1800,3))
pt = 0
>>> for k in range(x.shape[0]):
...     for j in range(x.shape[1]):
...         for i in range(x.shape[2]):
...             coordlist[pt]=np.array((x[k,j,i],y[k,j,i],z[k,j,i]))
...             pt += 1

这是有效的,但这是我们在这里谈论的numpy所以我认为必须有一些更好的无循环方式来做到这一点。谁能告诉我这可能是什么?

1 个答案:

答案 0 :(得分:2)

如果你想要1800 x 3:

coordlist = np.column_stack((x.ravel(), y.ravel(), z.ravel()))

否则,使用np.row_stack获得3 x 1800。