[英]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
對軸進行一些置換並進行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])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.