Numpy の配列アクセス方法

a = np.arange(18).reshape(2, 3, 3)
という指定を行うと、下記のような 18個の (2, 3, 3) 配列が返る。

a もしくは a[:, :, :] でアクセスする。[:, :, :] って凄い指定の仕方。。

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

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

この結果に対して a[0] もしくは a[0, :, :] でアクセスすると

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

a[1][0] もしくは a[1, :, :] にアクセスすると、

array([ 9, 10, 11])

になる。

配列の範囲指定 [:]

[:, :, :] は範囲指定を行える。[begin:end] 指定。t = np.arange([2, 3, 4, 5, 6, 7]) で t[2:5] とした場合は、index が 2, 3, 4 までの値 array([4, 5, 6]) が返る。

a と a[:, :, :] と a[0:2, 0:3, 0:3] は全て同じ結果になる。a[0, :, :] にアクセスすると [[ 0, 1, 2], [3, 4, 5], [6, 7, 8]] が返る。a[:, 1, :] にアクセスすると [[ 3, 4, 5], [12, 13, 14]] が返る。3次元配列の 2つ目が 1 で固定されるため。a[:, :, 0] にアクセスすると [[ 0, 3, 6], [ 9, 12, 15]] が返る。3要素のベクトルの先頭 [0] のみが返るため。

最後の要素にアクセス

a[-1, -1, -1] という風に -1 を指定すると、値としては 17 が帰ってくる。-1 は配列要素の最後の要素。

転置行列

a.transpose(0, 2, 1) という風に transpose() と入れ替える軸を指定すると、この結果は下記になる。1, 2 -> 2, 1 に順番にしたので転置されてる。

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

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

一次元化

a.flatten() 命令を使用すると、ndim 1 の 1次元ベクトルになる。

array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17])

コメントを残す

メールアドレスが公開されることはありません。