100

Numpy's tutorialから、軸0は列用、行用のように整数でインデックス付けできますが、1なぜこのようにインデックス付けされているのかわかりませんか? また、多次元配列を扱う場合、各軸のインデックスをどのように把握すればよいですか?

4

4 に答える 4

164

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

たとえば、2D 配列のa形状が (5,6) の場合、a[0,0]最大a[4,5]. したがって、軸 0 は最初の次元 (「行」) であり、軸 1 は 2 番目の次元 (「列」) です。「行」と「列」が本当に意味をなさない高次元では、関連する形状とインデックスの観点から軸を考えてみてください。

たとえば.sum(axis=n)、ディメンションnは折りたたまれて削除され、新しいマトリックスの各値は、対応する折りたたまれた値の合計に等しくなります。たとえば、bが shape(5,6,7,8)で、 を実行するc = b.sum(axis=2)と、軸 2 (サイズ 7 の次元) が折りたたまれ、結果は shape になり(5,6,8)ます。さらに、c[x,y,z]はすべての要素の合計に等しいb[x,y,:,z].

于 2013-06-13T04:49:06.467 に答える
10

一般に、軸 = 0 は、2 番目の次元と 3 番目の次元の各値によって変化する最初の次元を持つすべてのセルを意味します。

たとえば、2 次元配列には 2 つの対応する軸があります。最初の軸は行を垂直に下向きに走り (軸 0)、2 つ目は列を横切って水平に走ります (軸 1)。

3Dの場合は複雑になるので、複数のforループを使う

>>> 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]]))
于 2016-06-20T06:33:25.827 に答える