选择性地将 3d 阵列重塑为 2d 阵列
Selective reshaping of 3d array to 2d array
我正在处理 3d 向量数组,但无法正确重塑。
我的尺寸对应数量如下:
0 = 向量 (3)
1 = 点 (4)
2 = 折线 (2)
所以这可以解释为 2 条折线,每条包含 4 个点,每个点都有一个向量。我想重塑为 (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)对应的所有向量?
您需要使用 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])
我正在处理 3d 向量数组,但无法正确重塑。 我的尺寸对应数量如下:
0 = 向量 (3)
1 = 点 (4)
2 = 折线 (2)
所以这可以解释为 2 条折线,每条包含 4 个点,每个点都有一个向量。我想重塑为 (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)对应的所有向量?
您需要使用 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])