今回は、Pythonのnumpy.where()メソッドの動作にフォーカスして解説します。
numpy.where()関数の動作について
PythonのNumPyモジュールには、配列の要素を作成したり操作したりするための組み込み関数がたくさんあります。
numpy.where()関数は、特定の条件に基づいて配列の要素を返すために使用されます。
構文は以下の通りです。
numpy.where(condition,a,b) |
-
condition: 配列に適用される操作の条件を記述する必要があります。 -
a: a`: 条件が満たされた場合、つまり条件が True になった場合、この関数は a を返します。 -
b: b`: 条件が満たされない場合,この値が関数によって返されます.
例として以下の様になります。
例1:
import numpy as np
data = np.array([[10,20,30], [40,50,60], [0,1,2]])
print(np.where(data<20,True,False))
|
上記の例では、データ値が < 20 であるすべての配列要素について、そのデータ値が True に置き換えられます。
また、データ値が > 20 であるすべての配列要素、すなわち条件を満たさない値については、False に置き換えられる。
結果は以下の通りです。
[[ True False False]
[False False False]
[ True True True]]
|
例2:
import numpy as np
data = np.array([[10,20,30], [40,50,60], [0,1,2]])
data_set = np.where(data<20)
print("Data elements less than 20:)
print(data[data_set])
|
上記の例では、20未満の配列要素をすべて表示しました。
出力は以下の通りです。
Data elements less than 20:
[10 0 1 2]
|
Python numpy.where()関数と複数条件の併用
numpy.where()関数と一緒に複数の条件を適用することで、複数の条件に対して配列の要素を操作することができます。
構文は以下の通りです。
numpy.where((condition1)&(condition2)) OR
numpy.where((condition1)|(condition2)) |
例として以下の様になります。
import numpy as np
data = np.array([[10,20,30], [40,50,60], [0,1,2]])
data_set = np.where((data!=20)&(data<40))
print(data[data_set])
|
この例では、データ値が40未満かつ20以上の配列要素をすべて表示します。
結果は以下の通りです。
[10 30 0 1 2]
|
例2:
import numpy as np
data = np.array([[10,20,30], [40,50,60], [0,1,2]])
data_set = np.where((data<20)|(data>40))
print(data[data_set])
|
つまり、20未満の配列要素と40以上の配列要素が表示されます。
結果は以下の通りです。
[10 50 60 0 1 2] |
numpy.where() 関数を使った配列の値の置き換え
numpy.where()関数を使うと、ある条件を満たすかどうかによって、配列の値を置き換えることができます。
構文は以下の通りです。
numpy.where(condition,element1,element2) |
例えば、以下の様になります。
import numpy as np
data = np.random.randn(2,3)
print("Data before manipulation:)
print(data)
data_set = np.where((data>0),data,0)
print(")
print(data_set)
|
この例では、データ値が0より小さい、つまり前述の条件を満たさない配列要素をすべて0に置き換えています。
結果は以下の通りです。
Data before manipulation:[[ 0.47544941 -0.35892873 -0.28972221]
[-0.9772084 1.04305061 1.84890316]]
Data after manipulation:[[0.47544941 0. 0. ]
[0. 1.04305061 1.84890316]]
|
まとめ
この記事では、Pythonのnumpy.where()関数が様々な入力に対してどのように動作するかを理解しました。