2017-08-09 3 views
0

それは> 3. セイ軸スワップ

次元の配列で軸を交換に来たときに、私はnumpyのswapaxes機能がどのように動作するかを把握することを使命に着手し、バリケードのようなものを達しました
import numpy as np 
array=np.arange(24).reshape(3,2,2,2) 

これは、要素0-2を持つ形状(3,2,2,2)の配列が細かくなります。私は4軸を別々に視覚化することができないこの場合、軸スワッピングがどのように正確に機能するかを誰かに説明することはできますか? は、私は誰かが実際に4軸以上がある場合に発生している抽象スワップを記述することができればそれは素晴らしいことだ軸0と2

array.swapaxes(0,2) 

を交換してみたいと思います。ありがとう!

答えて

0

4d配列をどのように「記述する」のですか?我々は一致する直感を持っていません。私たちができることは、2次元の経験からのプロジェクトです。行、列、面、??

この配列は、実際の印刷を示すのに十分に小さい。

In [271]: arr = np.arange(24).reshape(3,2,2,2) 
In [272]: arr 
Out[272]: 
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]]]]) 

プリント[]は、余分な空白行を持つ高次元をマーク。

In [273]: arr.swapaxes(0,2) 
Out[273]: 
array([[[[ 0, 1], 
     [ 8, 9], 
     [16, 17]], 

     [[ 4, 5], 
     [12, 13], 
     [20, 21]]], 


     [[[ 2, 3], 
     [10, 11], 
     [18, 19]], 

     [[ 6, 7], 
     [14, 15], 
     [22, 23]]]]) 

実際に行われているものを参照するには、我々は配列の基礎となる性質を見ている

In [274]: arr.__array_interface__ 
Out[274]: 
{'data': (188452024, False), 
'descr': [('', '<i4')], 
'shape': (3, 2, 2, 2), 
'strides': None, # arr.strides = (32, 16, 8, 4) 
'typestr': '<i4', 
'version': 3} 
In [275]: arr.swapaxes(0,2).__array_interface__ 
Out[275]: 
{'data': (188452024, False), 
'descr': [('', '<i4')], 
'shape': (2, 2, 3, 2), 
'strides': (8, 16, 32, 4), 
'typestr': '<i4', 
'version': 3} 

data属性は同じです - スワップとデータバッファを共有し、ビューであります元の。だから数字は動かされない。

シェイプの変更は明らかです。これは、スワップすることです。場合によっては、すべてのディメンションを異なるものにすることができます。 (2,3,4)

また、値が2 stridesに変更されましたが、ディスプレイにどのように影響するか説明するのは難しいですが。形状とストライドがどのように連携して(フラット・データ・バッファから)多次元配列を作成するかを知る必要があります。