次元のインデックス参照
Coddyの「NumPyの基礎」コースのレッスン 13/18。
Numpyは、次元のインデックス作成という非常に強力なツールをサポートしています。
次元をインデックスするには、コロン : を使用します。コロンは、それが配置された特定のインデックスにあるすべての要素を取得します。例えば、ary.shape # --> (2, 1, 3, 1) という形状の配列があると仮定します。ary[:, 0, 0, 0] のようにコロン : を配置すると、形状の最も左側にある2つの要素を取得し、それらそれぞれについて残りの次元の0番目の要素を抽出します。
注意: ブラケット [] 内のコロンの位置が、インデックスを作成している次元を意味します。つまり:
ary[:, 0, 0, 0]4次元目をインデックスary[0, :, 0, 0]3次元目をインデックスary[0, 0, :, 0]2次元目をインデックスary[0, 0, 0, :]1次元目をインデックスary[:, :, 0, 0]4次元目と3次元目をインデックス- など
例 1
ary = np.array([
[1, 2],
[3, 4]
])
ary[:, 0] # --> [1, 3]
ary[0, :] # --> [1, 2]コロンは指定されたインデックスにあるすべての要素を取得し、次のインデックスへと続けます。
このケースでは:
ary[:, 0]すべての最初の要素(行)を取得し、各要素において0番目の要素を取得します。ary[0, :]最初の要素を取得し、その要素内のすべての要素を取得します。
例 2
3D配列
ary = np.array([
[[1, 2], [3, 4]],
[[5, 6], [7, 8]]
])
ary[:, 0, :] # --> [[1, 2], [5, 6]]
ary[:, :, 0] # --> [[1, 3], [5, 7]]ary[:, 0, :]すべての要素を取得し、次にそれぞれの最初の要素を取得し、最後にそこにあるすべてを取得します。ary[:, :, 0]すべての要素を取得し、次にそれらすべての要素を取得し、最後にそれぞれの最初の要素を取得します。ary[0, :, :]の出力がどうなるか予想できますか?
例 3
すべての行から最初と最後のインデックスを取得する
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],
])
x[:, np.array([0, -1])]
>>> [0, 5, 6, 11, 12, 17, 18, 23]例 4
冒頭の例と同じ (2, 1, 3, 1) という形状の配列
ary = np.array([
[
[
[1],[2],[3]
]
],
[
[
[4],[5],[6]
]
]
])
ary[:, 0, 0, 0] # --> [1, 4]
ary[0, :, 0, 0] # --> [1]
ary[0, 0, :, 0] # --> [1, 2, 3]
ary[0, 0, 0, :] # --> [1]注意: スライシング のレッスンで学んだ start:stop:step というスライシング構文を使用することも可能です。
ary[:, 0:5, 2:3, :]
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
チャレンジ
簡単3次元配列 ary が与えられたとき、各1次元配列から2番目、3番目、および4番目の数値を取得してください。
自分で試してみよう
import numpy as np
'''
ary looks like:
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, 27, 28, 29],
[30, 31, 32, 33, 34, 35, 36, 37, 38, 39]],
[[40, 41, 42, 43, 44, 45, 46, 47, 48, 49],
[50, 51, 52, 53, 54, 55, 56, 57, 58, 59]],
[[60, 61, 62, 63, 64, 65, 66, 67, 68, 69],
[70, 71, 72, 73, 74, 75, 76, 77, 78, 79]],
[[80, 81, 82, 83, 84, 85, 86, 87, 88, 89],
[90, 91, 92, 93, 94, 95, 96, 97, 98, 99]]])
'''
ary = np.arange(0, 100).reshape(5, 2, 10) # don't change ary
res = ary[] # <-- Complete indices
print(str(res).replace("\n", "")) # don't change this line