2016-07-11 20 views
0

私はnumpyで3D行列を扱っています。私は実際にいくつかの計算を実行し、結果を戻すためにctypesを使ってこれらの行列をCに渡しています。今のところは、私の結果は正しいです(私は検証するために紙で数学を行いました)が、私はそれが欲しい形ではありません。3D numpy配列を特定の方法で並べ替える

例を示します。

array([[[ 0, 1, 2], 
     [ 3, 4, 5], 
     [ 6, 7, 8]], 

     [[ 9, 10, 11], 
     [12, 13, 14], 
     [15, 16, 17]], 

     [[18, 19, 20], 
     [21, 22, 23], 
     [24, 25, 26]]]) 

私はすべての2D部分行列のi番目の列はように、新しい2Dサブマトリクスを形成する形に変換する必要があります:

array([[[ 0, 9, 18], 
     [ 3, 12, 21], 
     [ 6, 15, 24]], 

     [[ 1, 10, 19], 
     [ 4, 13, 22], 
     [ 7, 16, 25]], 

     [[2, 11, 20], 
     [5, 14, 23], 
     [8, 17, 26]]]) 
Iは、フォームの3次元アレイを有します

np.rot90np.flipudnp.fliplrのさまざまな組み合わせを使用しようとしましたが、すべて利用できません。これに関する助けがあれば大いに感謝します。

ありがとうございます!

+0

'[6、13、24]'所望の出力には、右を見ていません。私はそれが間違いだと思っています。 – user2357112

+0

申し訳ありません。修正されました。 –

答えて

2

希望の出力は、軸の順序が逆の初期配列です。あなたはこのためにT属性を使用することができるようにそれは、numpyのは、任意の次元の配列に転置を一般方法は次のとおりです。

In [3]: x 
Out[3]: 
array([[[ 0, 1, 2], 
     [ 3, 4, 5], 
     [ 6, 7, 8]], 

     [[ 9, 10, 11], 
     [12, 13, 14], 
     [15, 16, 17]], 

     [[18, 19, 20], 
     [21, 22, 23], 
     [24, 25, 26]]]) 

In [4]: x.T 
Out[4]: 
array([[[ 0, 9, 18], 
     [ 3, 12, 21], 
     [ 6, 15, 24]], 

     [[ 1, 10, 19], 
     [ 4, 13, 22], 
     [ 7, 16, 25]], 

     [[ 2, 11, 20], 
     [ 5, 14, 23], 
     [ 8, 17, 26]]]) 
+0

ありがとうございます。これは私が提供したサンプルコードでも機能しましたが、私の実際の問題では、このソリューションでは十分ではありませんでした。私はいくつかのフープでジャンプしなければならなかったが、私はそれを働かせた。ありがとう! –

関連する問題