2013-06-13 11 views
21

からNumpy's tutorialまで、0は列のため、1は行ですが、インデックス化されている理由を把握していません。そして、多次元配列に対処する際にどのように各軸のインデックスを把握するのですか?軸はnumpyの配列でどのようにインデックスされていますか?

+5

'0'は行を参照し、' 1'は列を参照する必要があります。私はあなたが考えていると思う。 '.sum(軸= 0)'で、行を合計します(列の合計を生成します)。 – nneonneo

+0

@nneonneo、はい、それは私の言いたいことですから、どのように各軸のインデックスを知ることができますか? – Alcott

答えて

48

次元の軸番号は、配列shape内のその次元のインデックスです。また、インデックス作成中にそのディメンションにアクセスするために使用される位置です。

たとえば、2次元配列aに形状(5,6)がある場合は、までa[4,5]までアクセスできます。したがって、軸0は第1の次元(「行」)であり、第1の軸は第2の次元(「列」)である。高次元では、「行」と「列」が実際には意味をなさない場合は、関連する図形やインデックスの観点から軸を考えるようにしてください。

例えば.sum(axis=n)の場合、サイズnが折りたたまれて削除されます。新しいマトリックスのすべての値は、対応する折りたたみ値の合計と等しくなります。たとえば、bの形状が(5,6,7,8)で、c = b.sum(axis=2)の場合は、軸2(サイズ7の寸法)が折りたたまれ、結果の形状は(5,6,8)です。さらに、c[x,y,z]は、すべての要素の合計に等しい。c[x,y,:,z]。一般に

+0

ありがとうございました。 – Alcott

+0

この回答に感謝します。それは私のために多くのものをクリアした。 –

+1

これは、https://youtu.be/gtejJ3RCddE?t=2h38m15s – bicepjai

5

、軸= 0は、2次元アレイは、二つの対応する軸を有しているので、例えば

に2次元と3次元との各値に変化する最初の次元を持つすべてのセルを意味する:最初は、垂直方向に実行します下方列(軸0)、及び第二列にわたって水平に延びる(軸1)

3Dを、それが複雑になるので、ループ

>>> x = np.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]]]) 

>>> x.shape #(3, 3, 3) 

#axis = 0 
>>> for j in range(0, x.shape[1]): 
     for k in range(0, x.shape[2]): 
     print("element = ", (j,k), " ", [ x[i,j,k] for i in range(0, x.shape[0]) ]) 
... 
element = (0, 0) [0, 9, 18]    #sum is 27 
element = (0, 1) [1, 10, 19]   #sum is 30 
element = (0, 2) [2, 11, 20] 
element = (1, 0) [3, 12, 21] 
element = (1, 1) [4, 13, 22] 
element = (1, 2) [5, 14, 23] 
element = (2, 0) [6, 15, 24] 
element = (2, 1) [7, 16, 25] 
element = (2, 2) [8, 17, 26] 

>>> x.sum(axis=0)    
array([[27, 30, 33], 
     [36, 39, 42], 
     [45, 48, 51]]) 

#axis = 1  
for i in range(0, x.shape[0]): 
    for k in range(0, x.shape[2]): 
     print("element = ", (i,k), " ", [ x[i,j,k] for j in range(0, x.shape[1]) ]) 

element = (0, 0) [0, 3, 6]  #sum is 9 
element = (0, 1) [1, 4, 7] 
element = (0, 2) [2, 5, 8] 
element = (1, 0) [9, 12, 15] 
element = (1, 1) [10, 13, 16] 
element = (1, 2) [11, 14, 17] 
element = (2, 0) [18, 21, 24] 
element = (2, 1) [19, 22, 25] 
element = (2, 2) [20, 23, 26] 

# for sum, axis is the first keyword, so we may omit it, 

>>> x.sum(0), x.sum(1), x.sum(2) 
(array([[27, 30, 33], 
     [36, 39, 42], 
     [45, 48, 51]]), 
array([[ 9, 12, 15], 
     [36, 39, 42], 
     [63, 66, 69]]), 
array([[ 3, 12, 21], 
     [30, 39, 48], 
     [57, 66, 75]])) 
2

の利用複数横切っこのように軸を把握することができます:

>>> a = np.array([[[1,2,3],[2,2,3]],[[2,4,5],[1,3,6]],[[1,2,4],[2,3,4]],[[1,2,4],[1,2,6]]]) 
array([[[1, 2, 3], 
    [2, 2, 3]], 

    [[2, 4, 5], 
    [1, 3, 6]], 

    [[1, 2, 4], 
    [2, 3, 4]], 

    [[1, 2, 4], 
    [1, 2, 6]]]) 
>>> a.shape 
(4,2,3) 

構造がはっきりとわかるように、値が異なるの形状の配列を作成しました。軸が異なると、異なる「レイヤー」を意味します。

つまり、axis = 0のインデックスの最初の次元は(4,2,3)です。それは最初の[]の配列を参照します。そこに4つの要素があるので、その形状は4:

array[[1, 2, 3], 
     [2, 2, 3]], 

    array[[2, 4, 5], 
     [1, 3, 6]], 

    array[[1, 2, 4], 
     [2, 3, 4]], 

    array[[1, 2, 4], 
     [1, 2, 6]] 

axis = 1インデックス形状(4,3,2)第二次元は。レイヤの各配列には2つの要素があります:axis = 0、e.c。

の配列中
array[[1, 2, 3], 
     [2, 2, 3]] 

の配列にあります。

array[1, 2, 3] 

array[2, 2, 3] 

そして、第3の形状値は層の各アレイ素子内の3つの要素があることを意味: 2つの要素があるaxis = 2は。 e.c. array[1, 2, 3]には3つの要素があります。それは明白です。

また、最初または最後に[]の番号から軸/寸法を指定することもできます。この場合、番号は3([[[)ですので、axis = 0axis = 1axis = 2からaxisを選択できます。

関連する問題