最大値と最小値

最大値と最小値

要素の最大値

max()

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

# PYTHON_MAX

# In[1]

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

print(val)
30

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

# In[2]

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

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

print(val)
83

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

# In[3]

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

# 2番目の要素が最大となるタプルを取得
val = max(num, key=lambda x:x[1])

print(val)
(4, 9)

 文字列 (テキストシーケンス) もイテラブルなので、max() の第 1 引数に渡せます。
 たとえば、"abcde" という文字列を渡すと e が返ります。

# In[4]

val = max("abcde")

print(val)
e

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

# In[5]

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

print(val)

 

numpy.max()

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

# NUMPY_MAX

# In[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 を渡すと、もとの配列の次元を保持します。

# In[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]]

 nan は常に最大値として扱われます。

# In[3]

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

x_max = np.max(x)

print(x_max)
nan

 

numpy.nanmax()

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

# NUMPY_NANMAX

# In[1]

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

x_nanmax = np.nanmax(x)

print(x_nanmax)
80.0

 

numpy.argmax()

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

# NUMPY_ARGMAX

# In[1]

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

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

print(x_max)
3

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

# In[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.maximum()

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

# NUMPY_MAXIMUM

# In[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 の各要素と数値 x2 が比較され、小さくないほうが新しい配列の要素となります。

# In[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]

 

要素の最小値

min()

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

# PYTHON_MIN

# In[1]

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

print(val)
10

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

# In[2]

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

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

print(val)
33

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

# # In[3]

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

# 3番目の要素が最小となるタプルを取得
val = min(num, key = lambda x:x[2])

print(val)
(9, 2, 1)

numpy.min()

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

# NUMPY_MIN

# In[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 を渡すと、もとの配列の次元を保持します。

# In[2]

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

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

print(x_min_1k)
[[20]
 [5]]

 nan は常に最小値として扱われます。

# In[3]

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

x_min = np.min(x)

print(x_min)
nan

 

numpy.nanmin()

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

# NUMPY_NANMIN

# In[1]

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

x_nanmin = np.nanmin(x)

print(x_nanmin)
17.0

 

numpy.argmin()

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

# NUMPY_ARGMIN

# In[1]

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

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

print(x_min)
1

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

# In[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]
[2 1]

 

numpy.minimum()

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

# NUMPY_MINIMUM

# In[1]

x = np.array([[53,  7, 21],
              [32, 14, 50]])

y = np.array([35, 86, 16])

# xとyの1行目を比較して、大きくないほうの要素でzの1行目を生成
# xとyの2行目を比較して、大きくないほうの要素でzの2行目を生成
z = np.minimum(x, y)

print(z)
[[35  7 16]
 [32 14 16]]