最大値と最小値を取得する関数

最大値と最小値を取得する関数

最大値・最小値を取得する組み込み関数

max()

 max()関数に 2 つ以上の引数を与えると、その中から最大の引数を選んで返します。

# リストA-1

# 10,20,30の中から最大数を取得
m = max(10, 20, 30)

print(m)
30

 引数は必ずしも数値でなくても構いません。
 たとえば、"abcde" という文字列を渡すと e が返ります。

# リストB-1

m = max("abcde")

print(m)
e

 文字コードによって、アルファベットは大文字の A から始まって Z まで、そのあと小文字の a ~ z が続くというように順序づけられているからです。同様に平仮名にも順序があります。

# リストB-2

m = max("あいうえお")

print(m)

  
 max()関数にイテラブル・オブジェクトを渡すと、オブジェクトの最大要素を返します。

# リストC-1

num = [65, 42, 68, 83, 55]

# numの最大要素を取得
m = max(num)

print(m)
83

 タプルを要素にもつリストなどを引数に渡す場合、key に関数を渡して、特定のインデックスの要素同士を比較して最大の値を得ることもできます。以下のコードでは、インデックス番号 1 の要素を取り出す lambda 関数(無名関数)を key に渡しています。

# リストD-1

num = [(5, 3), (1, 4), (4, 9)]

# タプルの2番目の要素を比較して最大数を取得
m = max(num, key = lambda x:x[1])

print(m)
(4, 9)

 

min()

 min()関数に 2 つ以上の引数を与えると、最小の引数を選んで返します。

# リストE-1

# 10,20,30の中から最小数を取得
m = min(10, 20, 30)

print(m)
10

 
 min()関数にイテラブル・オブジェクトを渡すと、オブジェクトの最小要素を返します。

# リストF-1

num = [33, 94, 61, 70, 65]

# numの最小要素を取得
m = min(num)

print(m)
33

 タプルを要素にもつリストなどを引数に渡すとき、key に適切な関数を渡して、特定のインデックスの要素同士を比較して最大の値を得ることもできます。以下のコードでは、インデックス番号 2 の要素を取り出す lambda 関数(無名関数)を key に渡しています。

# リストG-1

num = [(5, 7, 2), (0, 3, 4), (9, 2, 1)]

# タプルの3番目の要素を比較して最小数を取得
m = min(num, key = lambda x:x[2])

print(m)
(9, 2, 1)

 

最大値・最小値を取得するNumPy関数

numpy.max()

 numpy.max() に配列を渡すと配列の最大要素を返します。オプション引数 axis を指定した場合、指定した軸ごとに最大要素を取り出して 1次元配列を生成します。

# リスト H-1

# NumPyをインポート
import numpy as np

# 要素の最大値を取得
x_max = np.max(x)

# 各列の最大要素を取り出して1次元配列を生成
x_max_0 = np.max(x, axis = 0)

# 各行の最大要素を取り出して1次元配列を生成
x_max_1 = np.max(x, axis = 1)

print(x_max)
print(x_max_0)
print(x_max_1)
79
[52 79 62]
[52 79]

 keepdims に True を渡すと、もとの配列の次元を保持します。

# リストH-2

# x = [[52, 35, 41],
#      [18, 79, 62]]

# 各列の最大要素を取り出して1次元配列を生成(次元を保持)
x_max_0k = np.max(x, axis = 0, keepdims = True)

print(x_max_0k)
[[52 79 62]]

 

numpy.min()

 numpy.min() に配列を渡すと配列の最小要素を返します。オプション引数 axis に数値を渡すと、指定した軸ごとに最小要素を取り出して 1次元配列を生成します。

# リスト I-1

x = np.array([[45, 20, 68],
              [ 5, 91, 37]])

# 要素の最小値を取得
x_min = np.min(x)

# 各列の最小要素を取り出して1次元配列を生成
x_min_0 = np.min(x, axis = 0)

# 各行の最小要素を取り出して1次元配列を生成
x_min_1 = np.min(x, axis = 1)

print(x_min)
print(x_min_0)
print(x_min_1)
5
[ 5 20 37]
[20  5]

 keepdims に True を渡すと、もとの配列の次元を保持します。

# リストI-2

# x = [[45, 20, 68],
#      [ 5, 91, 37]]

# 各行の最小要素を取り出して1次元配列を生成(次元を保持)
x_min_1k = np.max(x, axis = 1, keepdims = True)

print(x_min_1k)
[[68]
 [91]]

 

numpy.nanmax()

 numpy.max() に numpy.nan の要素が混じった配列を渡すと nan を返します。

# リストJ-1

x = np.array([61, 12, 80, np.nan, 74])

x_max = np.max(x)

print(x_max)
nan

 numpy.nanmax() は nan を無視して最大要素を float型で返します。

# リストJ-2

x = np.array([61, 12, 80, np.nan, 74])

x_nanmax = np.nanmax(x)

print(x_nanmax)
80.0

 

numpy.nanmin()

 numpy.min() に numpy.nan の要素が混じった配列を渡すと nan を返します。

# リストK-1

x = np.array([39, 17, np.nan, 51, 43])

x_min = np.min(x)

print(x_min)
nan

 numpy.nanmin() は nan を無視して最小要素を float型で返します。

# リストK-2

x = np.array([39, 17, np.nan, 51, 43])

x_nanmin = np.nanmin(x)

print(x_nanmin)
17.0

 

numpy.argmax()

 numpy.argmax() は配列の最大要素のインデックスを返します。

# リストK-1

x = np.array([81, 25, 41, 96, 58])

# 最大要素のインデックスを取得
x_max = np.argmax(x)

print(x_max)
3

 axis を指定すると、軸ごとの最大要素のインデックスをもつ新しい配列を生成します。

# リストK-2

x = np.array([[28, 63, 14],
              [77, 22, 40]])

# 列ごとの最大要素のインデックスで配列を生成
x_max_0 = np.argmax(x, axis = 0)

# 行ごとの最大要素のインデックスで配列を生成
x_max_1 = np.argmax(x, axis = 1)

print(x_max_0)
print(x_max_1)
[1 0 1]
[1 0]

 

numpy.argmin()

 numpy.argmin() は配列の最小要素のインデックスを返します。

# リストL-1

x = np.array([81, 25, 41, 96, 58])

# 最小要素のインデックスを取得
x_min = np.argmin(x)

print(x_min)
1

 オプション引数 axis を指定すると、軸ごとの最小要素のインデックスをもつ新しい配列を生成します。

# リストL-2

x = np.array([[28, 63, 14],
              [77, 22, 40]])

# 列ごとの最小要素のインデックスで配列を生成
x_min_0 = np.argmin(x, axis = 0)

# 行ごとの最小要素のインデックスで配列を生成
x_min_1 = np.argmin(x, axis = 1)

print(x_min_0)
print(x_min_1)
[0 1 0]
1[2 1]

 

numpy.maximum()

 numpy.maximum(x1, x2) は配列 x1 と配列 x2 の各要素を比較し、小さくないほうを要素にもつ新しい配列を生成します。x1 と x2 は同じ形状、もしくはブロードキャスト可能な形状をしていなければなりません。

# リストM-1

x1 = np.array([15, 60, 47,  8, 20])
x2 = np.array([49, 60, 25, 21, 33])

# x1とx2の各要素を比較して小さくないほうを要素にもつ配列を生成
y = np.maximum(x1, x2)

print(y)
[49 60 47 21 33]

 x1 が 1 次元配列、x2 が数値(スカラー)である場合、x2 は同じ数値をもつ 1 次元配列にブロードキャストされたうえで、各要素が比較されて新しい配列が生成されます。すなわち、x1 の各要素と数値 x1 が比較され、小さくないほうが新しい配列の要素となります。

# リストM-2

x1 = np.array([15, 60, 47,  8, 20])

# x1の各要素と30を比較して小さくないほうを要素にもつ配列を生成
# (30は1次元配列[30, 30, 30, 30, 30]にブロードキャストされる)
y = np.maximum(x1, 30)

print(y)
[30 60 47 30 30]