今回は、NumPyの配列を条件付きで検索する5つのテクニックに焦点を当て、詳しく解説していきます。
それでは、はじめましょう
NumPyの配列は、似たような型の要素を連続した構造で保存します。
我々はしばしば、動的な実行時に配列の最大と最小の要素を見る必要がある状況に出くわします。
NumPy は、特定の条件が適用された特定の要素を検索することができる一連の関数を提供しています。
この記事もチェック:PythonのNumPyでの配列の作成やスライス、変更について解説する
How to search NumPy arrays for specific elements?
NumPy の配列の検索に使われる 5 つの関数を詳しく見てみましょう。
- argmax() 関数
- nanargmax() 関数
- argmin()関数
- nargmin()関数
- where()関数を用いた検索
1. NumPy の argmax() 関数
NumPyのargmax()関数を使うと、配列構造中に存在する最大(最大)の要素のインデックスを簡単に取得し、表示することができる。
これにより、最大要素のインデックスは、argmax()関数からの結果値となる。
構文は以下の様な感じです。
numpy.argmax() function |
例えば、以下の様になります。
import numpy as np
data = np.array([[ 66 , 99 , 22 , 11 , - 1 , 0 , 10 ],[ 1 , 2 , 3 , 4 , 5 , 0 , - 1 ]])
res = np.argmax(data)
print (data)
print ( "Max element's index:" , res)
|
結果は以下の通りです。
上記の例では、同じデータ型の配列を2つ作成しました。
さらに、argmax()関数を適用して、すべての要素から最大要素のインデックスを取得しました。
99が最大の要素なので、結果のインデックス値として1が表示されます。
[[ 66 99 22 11 - 1 0 10 ]
[ 1 2 3 4 5 0 - 1 ]]
Max element's index: 1
|
この記事もチェック:Numpyのブール配列の作成、演算、インデックス等を解説する
2. NumPy nanargmax() 関数
nanargmax()関数を用いると、配列中に存在するNANやNULLの値を簡単に扱うことができる。
つまり、別扱いされることはない。
NAN 値は、その後、検索値の機能に影響を与えません。
構文は以下の様な感じです。
numpy.nanargmax() |
例えば、以下の様になります。
以下の例では、配列の要素に numpy.nan 関数で渡された NULL 値が含まれています。
さらに、nanargmax()関数を用いてNumPyの配列を検索し、NAN要素が検索に影響しないように配列要素から最大値を求めています。
import numpy as np
data = np.array([[ 66 , 99 , 22 ,np.nan, - 1 , 0 , 10 ],[ 1 , 2 , 3 , 4 ,np.nan, 0 , - 1 ]])
res = np.nanargmax(data)
print (data)
print ( "Max element's index:" , res)
|
結果は以下の通りです。
[[ 66. 99. 22. nan - 1. 0. 10. ]
[ 1. 2. 3. 4. nan 0. - 1. ]]
Max element's index: 1
|
3. NumPy の argmin() 関数
argmin()関数を使用すると、NumPyの配列を検索し、より広いスケールで配列に存在する最小の要素のインデックスを取得することができます。
これは、配列構造内に存在する最小の値を検索し、同じ値のインデックスを返します。
したがって、このインデックスを使用すると、配列に存在する最小の要素を簡単に取得することができます。
構文は以下の様な感じです。
numpy.argmin() function |
例えば、以下の様になります。
import numpy as np
data = np.array([[ 66 , 99 , 22 , 11 , - 1 , 0 , 10 ],[ 1 , 2 , 3 , 4 , 5 , 0 , - 1 ]])
res = np.argmin(data)
print (data)
print ( "Min element's index:" , res)
|
出力。
以下のように、最小の要素、すなわち[-1]を占めるインデックスが2つあります。
しかし、argmin()関数は、配列の値から最小の要素の最初の出現のインデックスを返します。
[[ 66 99 22 11 - 1 0 10 ]
[ 1 2 3 4 5 0 - 1 ]]
Min element's index: 4
|
4. NumPyのwhere()関数
where() 関数を使うと、NumPy の配列から、関数にパラメータとして渡された条件にマッチする要素のインデックス値を簡単に検索することができる。
構文は以下の様な感じです。
numpy.where(condition) |
例えば、以下の様になります。
import numpy as np
data = np.array([[ 66 , 99 , 22 , 11 , - 1 , 0 , 10 ],[ 1 , 2 , 3 , 4 , 5 , 0 , - 1 ]])
res = np.where(data = = 2 )
print (data)
print ( "Searched element's index:" , res)
|
出力。
この例では、配列から値が 2 に等しい要素を検索しています。
さらに、where() 関数は配列のインデックスとそのデータ型を返します。
[[ 66 99 22 11 - 1 0 10 ]
[ 1 2 3 4 5 0 - 1 ]]
Searched element's index: (array([ 1 ], dtype = int64))
|
5. NumPy nanargmin()関数
nanargmin() 関数を用いると、NumPy 配列を簡単に検索し、配列要素に存在する NAN 値を気にすることなく、最小の値のインデックスを見つけることができる。
NULL 値は、要素の検索に全く影響を与えません。
構文は以下の様な感じです。
numpy.nanargmin() |
例えば、以下の様になります。
import numpy as np
data = np.array([[ 66 , 99 , np.nan, 11 , - 1 , 0 , 10 ],[ 1 , 2 , 3 , 4 , 5 , 0 , - 1 ]])
res = np.nanargmin(data)
print (data)
print ( "Searched element's index:" , res)
|
結果は以下の通りです。
[[ 66. 99. nan 11. - 1. 0. 10. ]
[ 1. 2. 3. 4. 5. 0. - 1. ]]
Searched element's index: 4
|
この記事もチェック:Pythonのmin関数を使ってリストや配列の最小値を求める方法
まとめ
何か疑問があれば、お気軽にコメントください。
Pythonプログラミングに関連するこのような記事のために、私たちにご期待ください。
ではでは、Happy learning!