Home » Python » NumPyの使い方 » NumPyのwhere関数でn以上かつm以下のAnd条件を指定する

NumPyのwhere関数でn以上かつm以下のAnd条件を指定する

動作検証バージョン:Windows 11 Home + Python 3.10.6(64-bit)+ notebook server 6.5.3 + numpy 1.24.2

「python np.where 以上以下」
といった検索でアクセスがありました。

[スポンサードリンク]

Pythonで数値演算を行う際に使われる外部ライブラリ「NumPy(ナンパイ/ナムパイ)」の、where関数を使って「n以上かつm以下」といったAnd条件を指定するには、どうすればいいのかを調べていらしたのでしょうか。

NumPyのwhere関数でn以上かつm以下のAnd条件を指定する

以下のコードを参考にしてください。

import numpy as np

arr = np.array([0, 25, 50, 75, 100])

arr_filter = np.where((arr>=50) & (arr<=75), arr, None)
print(arr_filter)

実行すると、

[None None 50 75 None]

と出力されます。

元の配列から、

arr = np.array([0, 25, 50, 75, 100])

50以上かつ75以下のデータはそのまま、条件に合致しないデータはNoneにした、あらたな配列arr_filterを作成して、

arr_filter = np.where((arr>=50) & (arr<=75), arr, None)

arr_filterをprintしています。

条件「50以上かつ75以下」を指定しているのは、

arr_filter = np.where((arr>=50) & (arr<=75), arr, None)

の部分です。

演算子&を使えば、And条件を指定できるということです。

where関数にAnd条件を指定したときの挙動を確認しよう

先ほどのコードにつづけて

arr_bool = np.where((arr>=50) & (arr<=75), True, False)
print(arr_bool)

を実行すると、

[False False True True False]

と出力され、条件「50以上かつ75以下」を判定した結果がよくわかります。

条件に合致したデータに何らかの演算を行うことも可能です。
たとえば、

arr_10x = np.where((arr>=50) & (arr<=75), arr*10, arr)
print(arr_10x)

を実行すると、

[ 0 25 500 750 100]

と出力されます。
条件「50以上かつ75以下」に合致するデータのみ10倍されています。

条件に合致するデータだけの新たな配列を取得するなら

arr_trim = arr[np.where((arr>=50) & (arr<=75))]

です。
このarr_trimをprintすると

[50 75]

と出力されます。

そもそもwhere関数とは

where関数は、条件に合致するインデックス等を返してくれます。

arr_where = np.where((arr>=50) & (arr<=75))
print(arr_where[0])

を実行すると、

[2 3]

と出力されます。
条件「50以上かつ75以下」に合致するインデックスが2と3であると出力されます。

[スポンサードリンク]

Home » Python » NumPyの使い方 » NumPyのwhere関数でn以上かつm以下のAnd条件を指定する

Copyright © インストラクターのネタ帳 All Rights Reserved.

.