2017-06-06 16 views
1

私はベクトルの3次元配列を扱っており、正しく再構成するのに問題があります。 次のように私の寸法は、数量に対応する:2次元配列への3次元配列の選択的再形状

0 =ベクトル(3)

1 =点(4)

2 =ポリライン(2)

をので、この2として解釈することができますそれぞれが4点を含むポリラインであり、各点にベクトルがあります。私は(3、8)である2次元マトリックスに形を変えたいと思う。

元の配列は次のとおりです。

ので
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など)から1を取るようベクトルを注文

In: print new_array[:, 0] 
Out: [-0.707 0.  0.707] 

In: print new_array[:, 1] 
Out: [ 0. -0.707 0.707] 

しかし、私は

をしたいですそれは次のポリラインの前に与えられたポリラインのために(1軸に沿った)点に対応するすべてのベクトルをループするように私が再構築できるか
In: print new_array[:, 1] 
Out: [-0.371 0.  0.928] 

答えて

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])