NumPyのndarrayなどのコレクション要素から最小値を取得するには、np.amin
関数かndarrayのメソッドndarray.min
を使用します。
amin
とmin
の違いなどは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=
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=
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