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.0where, initialの使い方は最小値を抜き出すnumpy.aminとndarray.min関数の使い方で解説しております。参考にしてください。
 人工知能の今と一歩先を発信するメディア
人工知能の今と一歩先を発信するメディア
