複数のNumPy配列を比較!要素ごとの最大値・最小値を取得するテクニック


 

複数のNumPy配列を扱う際、それぞれの配列の同じ位置にある要素を比較し、その中から最大値や最小値を抽出したい場面はよくあります。例えば、複数のセンサーデータの中から各時点での最高値を求めたり、複数回の試行結果から最悪のケース(最小値)を特定したりする際に役立ちます。この記事では、複数のNumPy配列の要素ごとの最大値・最小値を取得するためのnp.maximum(), np.minimum()関数について、具体的なサンプルコードを交えながら詳しく解説します。


 

要素ごとの最大値・最小値とは?

 

要素ごとの(element-wise)最大値・最小値とは、複数の配列において、対応する位置にある要素同士を比較し、それぞれの位置で最大(または最小)となる値を取り出すことを指します。これは、配列の形状が同じである場合に適用できる操作です。


 

要素ごとの最大値を取得する:np.maximum()

 

np.maximum()関数は、2つの配列(または配列とスカラ値)を比較し、対応する要素の中から大きい方の値を返します。

 

書式

 

Python
 
numpy.maximum(x1, x2, /[, out, where, casting, order, …])
  • x1, x2: 比較する入力配列、またはスカラ値。NumPyのブロードキャスト機能が適用されます。

 

1. 2つの配列の要素ごとの最大値

 

 

サンプルコード

 

Python
 
import numpy as np

arr1 = np.array([1, 5, 3, 7])
arr2 = np.array([4, 2, 6, 0])

# arr1とarr2の要素ごとの最大値を取得
element_wise_max = np.maximum(arr1, arr2)
print("要素ごとの最大値:", element_wise_max)

 

出力例

 

要素ごとの最大値: [4 5 6 7]

 

2. 配列とスカラ値の要素ごとの最大値

 

配列の各要素とスカラ値を比較し、より大きい方を採用できます。例えば、全ての値をある閾値以上にしたい場合に便利です。

 

サンプルコード

 

Python
 
import numpy as np

arr = np.array([10, 3, 25, 8, 15])
threshold = 10

# 10未満の値を10にクリップ (最小値を10にする)
clipped_arr = np.maximum(arr, threshold)
print(f"閾値 {threshold} でクリップした配列:", clipped_arr)

 

出力例

 

閾値 10 でクリップした配列: [10 10 25 10 15]

 

3. 複数の配列の要素ごとの最大値(チェーン方式)

 

np.maximum()は一度に2つの引数しか取れませんが、関数をチェーンさせることで3つ以上の配列を比較できます。

 

サンプルコード

 

Python
 
import numpy as np

arr1 = np.array([1, 5, 3])
arr2 = np.array([4, 2, 8])
arr3 = np.array([7, 0, 6])

# arr1, arr2, arr3 の要素ごとの最大値を取得
max_all = np.maximum(arr1, np.maximum(arr2, arr3))
print("全ての配列の要素ごとの最大値:", max_all)

 

出力例

 

全ての配列の要素ごとの最大値: [7 5 8]

 

要素ごとの最小値を取得する:np.minimum()

 

np.minimum()関数は、np.maximum()と対称的で、2つの配列(または配列とスカラ値)を比較し、対応する要素の中から小さい方の値を返します。

 

書式

 

Python
 
numpy.minimum(x1, x2, /[, out, where, casting, order, …])
  • x1, x2: 比較する入力配列、またはスカラ値。NumPyのブロードキャスト機能が適用されます。

 

1. 2つの配列の要素ごとの最小値

 

 

サンプルコード

 

Python
 
import numpy as np

arr1 = np.array([1, 5, 3, 7])
arr2 = np.array([4, 2, 6, 0])

# arr1とarr2の要素ごとの最小値を取得
element_wise_min = np.minimum(arr1, arr2)
print("要素ごとの最小値:", element_wise_min)

 

出力例

 

要素ごとの最小値: [1 2 3 0]

 

2. 配列とスカラ値の要素ごとの最小値

 

配列の各要素とスカラ値を比較し、より小さい方を採用できます。例えば、全ての値をある閾値以下にしたい場合に便利です。

 

サンプルコード

 

Python
 
import numpy as np

arr = np.array([10, 3, 25, 8, 15])
threshold = 10

# 10超の値を10にクリップ (最大値を10にする)
clipped_arr = np.minimum(arr, threshold)
print(f"閾値 {threshold} でクリップした配列:", clipped_arr)

 

出力例

 

閾値 10 でクリップした配列: [10  3 10  8 10]

 

まとめ

 

複数のNumPy配列の要素ごとの最大値・最小値を取得することは、データ比較やクリッピング(値の範囲制限)など、様々なデータ処理で役立ちます。

  • np.maximum(arr1, arr2): 2つの配列の対応する要素から大きい方の値を取得します。スカラ値との比較も可能です。

  • np.minimum(arr1, arr2): 2つの配列の対応する要素から小さい方の値を取得します。スカラ値との比較も可能です。

これらの関数は、NumPyのブロードキャスト機能と連携するため、異なる形状の配列(ブロードキャスト可能であれば)やスカラ値との柔軟な操作が可能です。データの前処理、特徴量エンジニアリング、シミュレーション結果の比較など、あなたのNumPyワークフローでぜひ活用してみてください!🚀