今回はNumPyの最小要素のインデックスを取得してくれるargmin関数の使い方について解説します。

np.ndarray.argmin,np.argmin

APIドキュメント

それぞれの関数のAPIドキュメントは以下の通りです。

まずはndarray.argmin関数から。配列のメンバ関数となっています。

np.ndarray.argmin(axis=None, out=None)

params:

パラメータ名 概要
axis int (省略可能)初期値None
最小値を読み取る軸の方向を指定します。
out array_like
(配列に相当するもの)
(省略可能)初期値None
返されたインデックスの値を収納する配列を指定します。

returns:

指定された配列、軸方向のなかで最小値がある最初に出現する値のインデックスを返します。

次にnp.argmin関数です。

np.argmin(a, axis=None, out=None)

params:

パラメータ名 概要
a array_like
(配列に相当するもの)
最小値のインデックスを求めたい配列を指定します。
axis int (省略可能)初期値None
最小値を読み取る軸の方向を指定します。
out array_like
(配列に相当するもの)
(省略可能)初期値None
返されたインデックスの値を収納する配列を指定します。

returns:

指定された配列、軸方向のなかで最小値がある最初に出現する値のインデックスを返します。

最小のインデックスを求める

最初に基本的な使い方からです。

サンプルコードを見ていきます  
`axis`の詳しい考え方は先程の`argmax`のところで扱ったので省略します  

```python
In [1]: import numpy as np # numpyモジュールのインポート

In [2]: d = np.array([
   ...: [1.2, 1.5, 2.3, 1.8],
   ...: [0.2, 2.5, 2.1, 2.0],
   ...: [3.1, 3.3, 1.5, 2.1]])

In [3]: d.argmin() # まずは引数を指定しない状態で
Out[3]: 4

In [4]: np.argmin(d) # 同様に
Out[4]: 4

このように配列を1次元化した状態でのインデックスを返しています。

1次元化して出力しない

unravel_index関数を使うと1次元化しない状態でのインデックスを知ることができます。

In [5]: np.unravel_index(np.argmin(d), d.shape) # こうすれば1次元化されない状態でのインデックスが返される
Out[5]: (1, 0)

特定の軸方向の最小値をみる

axis引数を指定することで特定の軸方向での最小値をもつインデックスを知ることができます。


In [6]: np.argmin(d, axis=0) # 次は軸指定
Out[6]: array([1, 0, 2, 0])

In [7]: np.argmin(d, axis=1)
Out[7]: array([0, 0, 2])

In [8]: d.argmin(axis=1) # ndarray.argminでももちろん同じ操作ができる
Out[8]: array([0, 0, 2])