February 2024
Intermediate to advanced
576 pages
9h 17m
Japanese
これまでに、単純なインデクス(例えばarr[0])、スライス(例えばarr[:5])、ブール値マスク(例えばarr[arr > 0])を使用して配列の一部にアクセスし、その内容を変更する方法を見てきました。ここでは、ファンシーインデクスまたはベクトル化インデクスと呼ばれる配列インデクスを紹介します。ファンシーインデクスはすでに紹介した単純なインデクスのようにも見えますが、単一のスカラー値の代わりにインデクスの配列を渡します。これにより、配列の複雑なサブセットへの迅速なアクセスと内容の変更が可能となります。
ファンシーインデクスの概念は単純です。インデクスの配列を渡して、複数の配列要素に同時にアクセスします。例えば、次の配列で考えてみましょう。
In [1]: import numpy as np
rng = np.random.default_rng(seed=1701)
x = rng.integers(100, size=10)
print(x)
Out[1]: [90 40 9 30 80 67 39 15 33 79]
この中の3つの要素にアクセスしたい場合、おそらく次の方法を使います。
In [2]: [x[3], x[7], x[2]] Out[2]: [30, 15, 9]
インデクスのリストまたは配列を渡しても、同じ結果が得られます。
In [3]: ind = [3, 7, 4]
x[ind]
Out[3]: array([30, 15, 80])
ファンシーインデクスを使用すると、その結果の形状は元の配列の形状ではなく、インデクス配列の形状となります。
In [4]: ind ...