NumPy配列(np.array)の要素の中から最大値や最小値を取り出す関数に、np.max/np.minという関数があります。これらを使うことで、Python標準のmax/min関数を使うよりも高速な計算が可能です!是非とも使っていきたいですね!
さて、この記事ではnp.maxなどの、最大値を取り出す関数の使い方について紹介していきます。
この記事で解説する関数
- np.max 普通の配列から最大値を取り出す
- np.nanmax NaNが混ざった配列から、NaNを無視して最大値を取り出す
- np.maximum 要素ごと比較して大きい値と取り出す。
np.maxの引数と返り値
np.maxのパラメータ(引数)でよく使うものを解説します。ここでは、np.amaxのパラメータ説明をしていますが、np.maxと同じものです。
numpy.
amax
(a, axis=None, out=None, keepdims=<no value>, initial=<no value>)
配列全体の最大値を返す。
axisを指定している場合は、axisに沿った範囲内で最大値を取って配列として返す。
Parameters: |
|
---|---|
Returns: |
|
使い方
この記事のコードはJupyter上で実行して書かれました。コードを試しながら読み進める場合は、Jupyter Notebook/LabやIPythonで実行してみてください。
In [~]はJupyterのセルを表していて、コードがその後ろに書かれています。
これに対してOutの後ろは出力結果です。実際に動かしながら読んだほうがわかりやすいはずなので、是非Jupyterで実行しながら読んでみてください!
基本的な使い方
まずはimportしてサンプル配列を作成します。
In [1]: import numpy as np In [2]: x = np.arange(0,12) x2 = np.reshape(x, (3,4)) print("x:n", x) print("x2:n", x2)
Out:
np.maxでは最低限、最大値を取りたい配列を指定するだけで使うことができます。また、実はnp.amaxも同様の動きをします。
In [3]: np.max(x) Out[3]: 11 In [4]: np.max(x2) Out[4]: 11 In [5]: np.amax(x) Out[5]: 11
axisで列毎・行毎に最大値を取る
axis=0で列毎の最大値を取ります。
axis=1で行毎に最大値を取ります。
In [6]: np.max(x2, axis=0) Out[6]: array([ 8, 9, 10, 11]) In [7]: np.max(x2, axis=1) Out[7]: array([ 3, 7, 11])
np.nanmaxでnanが入った配列の最大値を取る
配列内にNaN(Non a Number)が入っている場合、普通のnp.max関数ではnanが最大値として出てきてしまいます。NaNを無視して最大値を取りたい場合は、np.nanmaxを使えばOKです。
使い方はmaxと同じです。
In [8]: x3 = np.array([1,2,np.nan, 3]) x3 Out[8]: array([ 1., 2., nan, 3.]) In [9]: # NaNが入った配列にnp.max関数を使うとNaNが返ってきてしまいます。 np.max(x3) Out[9]: nan In [10]: # np.nanmaxを使うことで、NaNを無視して最大値を取り出すことができます! np.nanmax(x3) Out[10]: 3.0
np.maximumで配列の要素毎に第二引数と大小関係を比較する
np.maximumという関数は、これまでと毛色の違う動きをします。この値は、第一引数と第二引数の大小関係を要素ごとに比較して、大きい方を格納した配列を返します。
In [11]: np.maximum(x3, 2) Out[11]: array([ 2., 2., nan, 3.]) In [12]: a = [10,20,30] b = [20,15,10] np.maximum(a,b) Out[12]: array([20, 20, 30])
まとめ
この記事では、np.maxを始めとした配列の要素から最大値を取り出す関数を解説しました。NumPyでは、行列計算で必要になるであろう機能がほぼほぼ網羅されています。
NumPyを使った計算をする際には、NumPyの世界で計算を終わらせることで高速な計算が可能です。是非ともこの記事で最大値に関わるNumPyの関数を覚えて、機械学習の実装などに役立ててください!
今回の記事は下記の記事を参考にしています。
参考記事: