重塑坐标列表
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. ]])
我有一个包含坐标 ([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. ]])