【NumPy入門 np.max】最大値を取り出すnp.max,np.nanmax,np.maximum

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と同じものです。

参考:SciPy.org

numpy.amax(a, axis=None, out=None, keepdims=<no value>, initial=<no value>)

配列全体の最大値を返す。

axisを指定している場合は、axisに沿った範囲内で最大値を取って配列として返す。

Parameters:
a : array_like

最大値を見つけたい配列

axis : None or int or tuple of ints, optional

最大値を計算する範囲をaxisで指定する。

out : ndarray, optional

outに配列を指定すると、出力するときに新しい配列を作らずにoutを上書きする(新しい配列を作らない)

keepdims : bool, optional
initial : scalar, optional
Returns:
amax : ndarray or scalar

Maximum of a. If axis is None, the result is a scalar value. If axis is given, the result is an array of dimension a.ndim - 1.

使い方

この記事のコードは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:

x:
 [ 0  1  2  3  4  5  6  7  8  9 10 11]
x2:
 [[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]

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の関数を覚えて、機械学習の実装などに役立ててください!

今回の記事は下記の記事を参考にしています。
参考記事:

この記事を書いた人

【プロフィール】
DX認定取得事業者に選定されている株式会社SAMURAIのマーケティング・コミュニケーション部が運営。「質の高いIT教育を、すべての人に」をミッションに、IT・プログラミングを学び始めた初学者の方に向け記事を執筆。
累計指導者数4万5,000名以上のプログラミングスクール「侍エンジニア」、累計登録者数1万8,000人以上のオンライン学習サービス「侍テラコヤ」で扱う教材開発のノウハウ、2013年の創業から運営で得た知見に基づき、記事の執筆だけでなく編集・監修も担当しています。
【専門分野】
IT/Web開発/AI・ロボット開発/インフラ開発/ゲーム開発/AI/Webデザイン

目次