重塑坐标列表

Reshaping a coordinate list

我有一个包含坐标 ([x1,x2,...xN],[y1,y2,...yN],[z1,z2,...zN]) 的 3xN 维数组,我需要将其整形为一个 Nx3 维坐标数组 ([x1,y1,z1],[x2,y2,z2],...,[xN,yN,zN])。我试过以下方法:

n=int(1e7)
x=np.linspace(0,1,n)
y=np.linspace(0,1,n)
z=np.linspace(0,1,n)
pos=np.array([x,y,z])

newpos=np.array(list(zip(pos[0],pos[1],pos[2])))

上面代码的问题在于它的目的很慢。不仅如此,当使用 n=1e7 时,代码会遇到内存错误。 还有其他方法可以达到预期目的吗?

用小n测试并展示这个过程:

In [9]: n = 5
In [10]: x=np.linspace(0,1,n)
    ...: y=np.linspace(0,1,n)
    ...: z=np.linspace(0,1,n)
    ...: pos=np.array([x,y,z])
In [11]: pos
Out[11]: 
array([[0.  , 0.25, 0.5 , 0.75, 1.  ],
       [0.  , 0.25, 0.5 , 0.75, 1.  ],
       [0.  , 0.25, 0.5 , 0.75, 1.  ]])
In [12]: newpos=np.array(list(zip(pos[0],pos[1],pos[2])))
In [13]: newpos
Out[13]: 
array([[0.  , 0.  , 0.  ],
       [0.25, 0.25, 0.25],
       [0.5 , 0.5 , 0.5 ],
       [0.75, 0.75, 0.75],
       [1.  , 1.  , 1.  ]])
In [14]: pos.T
Out[14]: 
array([[0.  , 0.  , 0.  ],
       [0.25, 0.25, 0.25],
       [0.5 , 0.5 , 0.5 ],
       [0.75, 0.75, 0.75],
       [1.  , 1.  , 1.  ]])