簡體   English   中英

將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對軸進行一些置換並進行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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM