前回の記事の応用版です。
参考: Numpy配列の非ゼロ要素のインデックスを取得する
非ゼロに限らず、何か特定の条件を満たす要素を抽出したい場面はよくあります。
(正の数だけとか、数値以外の条件とか)
その場合も、nozeroを使うことができます。
これは、Pythonのbool型の値、Flaseが0と見なされることを利用します。
対象の行列に対して、各要素が条件を満たすかどうかを
bool型(True/False)で示す配列を作り、それに対してnonzero()を使います。
前回の記事で使った行列の例を使って、
値が奇数の要素のインデックスを取り出してみましょう。
import numpy as np
# データの準備
ary = np.array(
[
[0, 0, -2, 0],
[1, 0, 2, 0],
[0, 0, 1, 0],
[3, 0, 0, 0],
]
)
# 奇数要素のインデックスを取得する。
xx, yy = np.nonzero(ary % 2 == 1)
for x, y in zip(xx, yy):
print(f"ary[{x}, {y}]={ary[x, y]}")
"""
ary[1, 0]=1
ary[2, 2]=1
ary[3, 0]=3
"""