NumPyのndarrayなどのコレクション要素から最大値を取得するには、np.amax
関数かndarrayのメソッドndarray.max
を使用します。
便利関数を知っておくと、研究や開発におけるコーディングが楽になるので、一つ一つしっかりと抑えておくことをオススメします。そこで、今回はmax
関数に焦点を絞って
-
np.amax
の使い方 -
ndarray.max
の使い方
について解説します。
np.amax
np.amax
関数のAPIドキュメントは以下の通りです。
**numpy.amax(a, axis = None, out = None, keepdims=
params:
パラメータ名 | 型 | 概要 |
---|---|---|
a |
array_like (配列に相当するもの) |
最大値を取得したい配列を指定します。 |
axis |
int | (省略可能)初期値None 最大値を求めたい軸の方向を指定します。何も指定しないと配列全体の中における最大値だけを返します。 |
out |
array_like (配列に相当するもの) |
返された値を代入する配列または値を指定します。 |
keepdims |
bool | (省略可能)初期値no value Trueを指定すると、次元を元の配列と同一のまま維持します。 |
initial |
値 | 最大値を選択するための初期値。配列が空のときに適用されます |
where |
bool、bool型の配列 | 初期値True。計算対象の要素の位置をTrueにします |
returns:
配列の中の最大値が返されます。axisを指定すると最大値の配列が返されます。
次のように使用します。最初にndarrayを指定すると、最大の要素を返します。
In [1]: import numpy as np
In [2]: np.amax(np.array([1, 2, 3, 2, 1]))
Out[2]: 3
第二引数のaxis
を使用することで、最大の要素を含むndarrayを取得することができます。
In [1]: import numpy as np
In [2]: np.amax(np.array([1, 2, 3, 2, 1]))
Out[2]: 3
In [3]: arr = np.array([1, 2, 3, 4]).reshape((2, 2,))
In [4]: np.amax(arr, axis=0)
Out[4]: array([3, 4])
In [5]: np.amax(arr, axis=1)
Out[5]: array([2, 4])
keepdims
にTrueを指定すると、次元を維持しようと試みます。
In [6]: np.amax(arr, keepdims=True)
Out[6]: array([[4]])
ndarray.max
上記のamax
とほとんど同様の関数として、ndarray.max
関数があります。max
のAPIドキュメントは以下の通りです。
**numpy.ndarray.max(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を指定すると最大値の配列が返されます。
(最大値を求めたい配列).max()
の形で使います。引数は、axis
で最大値を求める軸方向を指定し、out
では返ってきた値を代入する配列や値を指定します。
こちらについても、引数に何も指定しない場合から見ていきましょう。
In [1]: import numpy as np
In [2]: a = np.random.rand(20) # randを使って乱数を20個生成。
In [3]: a
Out[3]:
array([ 0.4079889 , 0.42521661, 0.01628929, 0.50168737, 0.45866707,
0.99267926, 0.13282352, 0.64414644, 0.57907025, 0.17062755,
0.23940831, 0.2237168 , 0.12609827, 0.3453716 , 0.28070336,
0.85881079, 0.1385899 , 0.58527288, 0.49337656, 0.15560073])
In [4]: a.max()
Out[4]: 0.99267926168679588
In [5]: a = a.reshape((4, 5))
In [6]: a
Out[6]:
array([[ 0.4079889 , 0.42521661, 0.01628929, 0.50168737, 0.45866707],
[ 0.99267926, 0.13282352, 0.64414644, 0.57907025, 0.17062755],
[ 0.23940831, 0.2237168 , 0.12609827, 0.3453716 , 0.28070336],
[ 0.85881079, 0.1385899 , 0.58527288, 0.49337656, 0.15560073]])
In [7]: a.max()
Out[7]: 0.99267926168679588
引数のaxis
を指定してみます。
In [9]: a.max(axis=0) # 引き続きaを用いて最大値を求める。行方向ごとの最大値。
Out[9]: array([ 0.99267926, 0.42521661, 0.64414644, 0.57907025, 0.45866707])
In [10]: a.max(axis=1) # 列方向ごとの最大値を求める。
Out[10]: array([ 0.50168737, 0.99267926, 0.3453716 , 0.85881079])
In [11]: b = np.random.rand(30).reshape((2,3,5)) # 今度は三次元配列で試してみる。
In [12]: b
Out[12]:
array([[[ 0.81056237, 0.31374358, 0.3555333 , 0.3677503 , 0.10169583],
[ 0.59097585, 0.33384972, 0.16766927, 0.11515705, 0.39226259],
[ 0.90469703, 0.69470498, 0.84976873, 0.48029518, 0.26157859]],
[[ 0.84307243, 0.55213584, 0.39988459, 0.76043728, 0.4109189 ],
[ 0.61920673, 0.01330184, 0.77007339, 0.66456173, 0.53900658],
[ 0.22458252, 0.38850737, 0.21106619, 0.54401199, 0.71752816]]])
In [13]: b.max(axis = 0) # 2つの二次元配列の要素のうちの大きい値
Out[13]:
array([[ 0.84307243, 0.55213584, 0.39988459, 0.76043728, 0.4109189 ],
[ 0.61920673, 0.33384972, 0.77007339, 0.66456173, 0.53900658],
[ 0.90469703, 0.69470498, 0.84976873, 0.54401199, 0.71752816]])
In [14]: b.max(axis = 1) # 各二次元配列の行方向
Out[14]:
array([[ 0.90469703, 0.69470498, 0.84976873, 0.48029518, 0.39226259],
[ 0.84307243, 0.55213584, 0.77007339, 0.76043728, 0.71752816]])
In [15]: b.max(axis = 2) # 各二次元配列の列方向
Out[15]:
array([[ 0.81056237, 0.59097585, 0.90469703],
[ 0.84307243, 0.77007339, 0.71752816]])
要素の中にひとつでもNaN
が含まれている場合は、NaN
が最大値として返されます。
NaN
を最大値として返して欲しくない場合には、nanmax
を使います。
In [21]: b = np.arange(10, dtype = np.float64)
In [22]: b[3] = np.NaN # NaNを代入
In [23]: b.max()
Out[23]: nan
In [24]: np.nanmax(b) # nanmaxを使うとNaN以外の要素における最大値を返してくれる。
Out[24]: 9.0
where
, initial
の使い方は最小値を抜き出すnumpy.aminとndarray.min関数の使い方で解説しております。参考にしてください。