NumPyのndarrayなどのコレクション要素から最小値を取得するには、np.amin関数かndarrayのメソッドndarray.minを使用します。

aminminの違いなどはmaxのときと同じなので、以下の記事を読んだ方はmaxをminに変更しただけと捉えてもらっても構いません。

最大値を抜き出すnumpy.amaxとndarray.max関数の使い方 /features/numpy-max.html

この記事では、

  • np.aminの使い方
  • ndarray.minの使い方

について解説します。

np.amin

np.amin関数のAPIドキュメントは以下の通りです。

**numpy.amin(a, axis = None, out = None, keepdims=, initial=, where=)**

params:

パラメータ名 概要
a array_like
(配列に相当するもの)
最小値を取得したい配列を指定します。
axis int (省略可能)int又はintのタプル
int型の場合は、指定した軸方向での最小の値を返します。int型のタプルの場合は、指定した複数の軸方向の中での最小値を返します
out array_like
(配列に相当するもの)
(省略可能)初期値None
返された値を代入する配列または値を指定します。
keepdims bool値 (省略可能)初期値no value
Trueを指定すると、次元を維持します。
initial 最大値を選択するための初期値。配列が空のときに適用されます
where bool、bool型の配列 初期値True。計算対象の要素の位置をTrueにします

returns:

配列の中の最小値が返されます。axisを指定すると最小値の配列が返されます。

次のように使用します。最初にndarrayを指定すると、最小の要素を返します。

In [1]: import numpy as np

In [2]: np.amin(np.array([1, 2, 3, 2, 1]))
Out[2]: 1

第二引数のaxisを使用することで、最小の要素を含むndarrayを取得することができます。

In [1]: import numpy as np

In [2]: a = np.array([
   ...: [1.2, 1.3, 0.1, 1.5],
   ...: [2.1, 0.2, 0.3, 2.0],
   ...: [0.1, 0.5, 0.5, 2.3]])

In [3]: np.amin(a) # 特に引数を指定しない状態
Out[3]: 0.1

In [4]: np.amin(a, axis=0) # 行方向に最小値を1つずつ抽出
Out[4]: array([0.1, 0.2, 0.1, 1.5])

In [5]: np.amin(a, axis=1) # 列方向
Out[5]: array([0.1, 0.2, 0.1])

In [6]: np.amin(a, axis=0, keepdims=True) # 1次元ではなく2次元配列で返される
Out[6]: array([[0.1, 0.2, 0.1, 1.5]])

In [7]: np.amin(a, axis=1, keepdims=True)
Out[7]:
array([[0.1],
       [0.2],
       [0.1]])

In [8]: a - np.amin(a, axis=1, keepdims=True) # こうするとブロードキャストが適用できる
Out[8]:
array([[1.1, 1.2, 0. , 1.4],
       [1.9, 0. , 0.1, 1.8],
       [0. , 0.4, 0.4, 2.2]])

In [9]: a - np.amin(a, axis=1) # keepdims=Trueにしないとうまく計算できない
---------------------------------------------------------------------------
(エラーメッセージが表示される)
ValueError: operands could not be broadcast together with shapes (3,4) (3,)

ndarray.min

上記のaminとほとんど同様の関数として、ndarray.min関数があります。minのAPIドキュメントは以下の通りです。

**numpy.ndarray.min(axis = None, out = None, keepdims=False, initial=, where=True)**

params:

パラメータ名 概要
axis int (省略可能)初期値None
最小値を求めたい軸の方向を指定します。何も指定しないと配列全体の中における最小値だけを返します。
out array_like
(配列に相当するもの)
(省略可能)初期値None
返された値を代入する配列または値を指定します。
keepdims bool値 (省略可能)初期値False
Trueを指定すると、次元を維持します。
initial 最小値を選択するための初期値。配列が空のときに適用されます
where bool、bool型の配列 初期値True。計算対象の要素の位置をTrueにします

returns:

配列の中の最小値が返されます。axisを指定すると最小値の配列が返されます。

(最小値を求めたい配列).min()の形で使います。引数は、axisで最小値を求める軸方向を指定し、outでは返ってきた値を代入する配列や値を指定します。

こちらについても、まずは引数に何も指定しない場合から見ていき、引数のaxisを指定してみます。

In [1]: import numpy as np

In [2]: a = np.array([
   ...: [1.2, 1.3, 0.1, 1.5],
   ...: [2.1, 0.2, 0.3, 2.0],
   ...: [0.1, 0.5, 0.5, 2.3]])

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

In [4]: a.min(axis=0) # 軸指定
Out[4]: array([0.1, 0.2, 0.1, 1.5])

In [5]: a.min(axis=1)
Out[5]: array([0.1, 0.2, 0.1])

In [6]: a.min(axis=0, keepdims=True)
Out[6]: array([[0.1, 0.2, 0.1, 1.5]])

In [7]: a.min(axis=1, keepdims=True)
Out[7]:
array([[0.1],
       [0.2],
       [0.1]])
In [8]: a = np.array([[1, 2, 3], [4, 5, 6]], dtype=float)

In [9]: a
Out[9]:
array([[1., 2., 3.],
       [4., 5., 6.]])

In [10]: np.min(a, where=[False, False, True], initial=10, axis=0) # 最後の列のみwhereで指定して計算させる
Out[10]: array([10., 10.,  3.])

In [11]: a[:, 1] = np.nan

In [12]: b = a.flatten()

In [13]: b
Out[13]: array([ 1., nan,  3.,  4., nan,  6.])

In [14]: np.min(b, where=~np.isnan(b), initial=10, axis=0) # nanを除いて最小値を計算する
Out[14]: 1.0