はじめに
この実験では、NumPy の高度なインデックス付けについて学びます。これは、選択したい要素が特定の順序でない場合に、ndarray の異なる行と列からランダムな要素を選択するために使用される技術です。
VM のヒント
VM の起動が完了したら、左上隅をクリックしてノートブックタブに切り替え、Jupyter Notebook を使って練習しましょう。
時々、Jupyter Notebook が読み込み終了するまで数秒待つ必要がある場合があります。Jupyter Notebook の制限により、操作の検証は自動化できません。
学習中に問題に遭遇した場合は、Labby にお問い合わせください。セッション後にフィードバックを提供してください。すぐに問題を解決いたします。
必要なライブラリのインポートと NumPy 配列の作成
まず、numpyライブラリをインポートし、高度なインデックス付けを行う NumPy 配列を作成する必要があります。
import numpy as np
x = np.array([[11, 28], [23, 84], [95, 56]])
print("The original array")
print(x)
上記のコードでは、numpyライブラリをインポートし、高度なインデックス付けに使用する NumPy 配列を作成しました。
整数インデックス付け
整数インデックス付けを使用すると、N 次元インデックスに基づいて任意の要素を選択できます。各整数配列は、その次元のインデックスの数を表します。
y = x[[0, 1, 2], [0, 0, 1]]
print("The output after integer indexing")
print(y)
上記のコードでは、NumPy 配列xに対して整数インデックス付けを行い、選択された要素を含む新しい配列yを作成しています。NumPy 配列xの各行から指定された列の 1 つの要素を選択しています。行インデックスにはすべての行番号が含まれ、列インデックスは選択する要素を指定します。
ブール型インデックス付け
比較演算子やその他の演算子を使って条件に基づいて ndarray から要素を選択したい場合には、ブールインデックス付けを使用します。
print("The items greater than 11 are:")
print(x[x > 11])
上記のコードでは、NumPy 配列xに対してブールインデックス付けを行っています。NumPy 配列xから 11 より大きい要素を返しています。
高度なインデックス付けと基本的なインデックス付けの組み合わせ
1 つのスライス (:) またはエリプシス (...) とインデックス配列を使って、高度なインデックス付けと基本的なインデックス付けを組み合わせることができます。
z = x[1:4, 1:3]
print("After using basic slicing")
print(z)
y = x[1:4, [1, 2]]
print("After slicing using advance index for column")
print(y)
上記のコードでは、NumPy 配列xをスライスしています。列に対して基本的なスライシングと高度なインデックス付けを使用しています。
Not a Number 値を削除する
補数演算子 (~) を使用して、数値でない (NaN) 値を削除することができます。
a = np.array([np.nan, 1, 12, np.nan, 3, 41, 54])
print("After omitting NaN the output array is :")
print (a[~np.isnan(a)])
上記のコードでは、補数演算子 (~) を使用して、NumPy 配列aから数値でない (NaN) 値を削除しています。
非複素数を削除する
iscomplex関数を使用して、配列から非複素数をフィルタリングできます。
a = np.array([1, 2+6j, 5, 3.5+5j])
print("After filtering the non-complex numbers :")
print (a[np.iscomplex(a)])
上記のコードでは、iscomplex関数を使用して、NumPy 配列aから非複素数をフィルタリングしています。
まとめ
この実験では、NumPy ライブラリにおける ndarray 要素のさまざまな種類の高度なインデックス付けについて学びました。NumPy における高度なインデック付けのさまざまな種類のユースケースに関するいくつかの例を扱いました。この技術を使用すると、NumPy 配列のさまざまな行と列からランダムな要素を選択できます。