2017-06-06 67 views
1

我正在處理向量的3d數組,並且無法正確地重新整形。 我的尺寸對應於數量如下:將3d數組選擇性地整形爲2d數組

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

您需要與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])