我正在使用3d矢量数组,并且无法正确地重塑。 我的尺寸对应于如下数量:
0 =向量(3)
1 =第(4)点
2 =折线(2)
因此,这可以解释为2条折线,每条折线包含4个点,每个点都有一个矢量。我想重塑一个2d矩阵,即(3,8)。
原始数组是:
poly_array = array([[[-0.707, 0.0],
[-0.371, 0.0],
[0.371, 0.0],
[0.707, 0.0]],
[[0.0, -0.707],
[0.0, 0.0],
[0.0, 0.707],
[0.0, 0.0]],
[[0.707, 0.707],
[0.928, 1.0],
[0.928, 0.707],
[0.707, 0.0]]])
所以,如果我在第一条折线上查看有序点,我会运行:
for i in range(4):
print poly_array[:,i,0]
或沿第二条折线的有序点:
for i in range(4):
print poly_array[:,i,1]
如果我重塑这种方式:
new_dim = shape(poly_array)[1] * shape(poly_array)[2]
new_array = poly_array.reshape(3, new_dim)
但是这会将向量排序为从每条折线中取一个(即pt0-polyline0,pt0-polyline1,pt1-polyline0,pt1-polyline1等)
In: print new_array[:, 0]
Out: [-0.707 0. 0.707]
In: print new_array[:, 1]
Out: [ 0. -0.707 0.707]
但我想要
In: print new_array[:, 1]
Out: [-0.371 0. 0.928]
如何重新整形以便在下一条折线之前循环通过对应于给定折线的点(沿轴1)的所有矢量?
答案 0 :(得分:0)
您需要使用np.swapaxes
和重塑 -
poly_array.swapaxes(1,2).reshape(poly_array.shape[0],-1)
示例运行 -
In [127]: poly_array
Out[127]:
array([[[-0.707, 0. ],
[-0.371, 0. ],
[ 0.371, 0. ],
[ 0.707, 0. ]],
[[ 0. , -0.707],
[ 0. , 0. ],
[ 0. , 0.707],
[ 0. , 0. ]],
[[ 0.707, 0.707],
[ 0.928, 1. ],
[ 0.928, 0.707],
[ 0.707, 0. ]]])
In [142]: out
Out[142]:
array([[-0.707, -0.371, 0.371, 0.707, 0. , 0. , 0. , 0. ],
[ 0. , 0. , 0. , 0. , -0.707, 0. , 0.707, 0. ],
[ 0.707, 0.928, 0.928, 0.707, 0.707, 1. , 0.707, 0. ]])
In [143]: out[:,1]
Out[143]: array([-0.371, 0. , 0.928])