NumPy配列の値を簡単調整!np.clipで最小値・最大値に収める方法


 

データ処理や機械学習のタスクにおいて、NumPy配列(ndarray)の値を特定の範囲内に制限したい場面はよくあります。例えば、異常に大きな値や小さな値を丸めたり、画像データのピクセル値を0から255の範囲に収めたりする場合などです。このような「値のクリッピング(clipping)」に最適なのがNumPyの**np.clip**関数です。この記事では、np.clipの基本的な使い方から、具体的なサンプルコードを交えながらその便利な機能までを詳しく解説します。


 

np.clipとは?

 

np.clipは、NumPy配列の要素を指定した最小値と最大値の間に「クリップ」する(収める)関数です。つまり、指定した最小値より小さい値は最小値に、最大値より大きい値は最大値に置き換えられます。範囲内の値はそのまま保持されます。

 

書式

 

Python
 
numpy.clip(a, a_min, a_max, out=None)
  • a: クリップしたい元の配列(ndarray)。

  • a_min: 適用する最小値。これより小さい要素はa_minに置き換えられます。

  • a_max: 適用する最大値。これより大きい要素はa_maxに置き換えられます。

  • out (オプション): 結果を格納する配列。指定しない場合は新しい配列が作成されます。

ポイント: a_mina_maxはスカラ値(単一の値)である場合が多いですが、aと同じ形状の配列であることも可能です。この場合、要素ごとに異なる最小値・最大値が適用されます。


 

np.clipの基本的な使い方

 

まずは、最もシンプルなケースから見ていきましょう。

 

1. 1次元配列のクリッピング

 

配列内の数値を指定した範囲(例: 0から10)に収めます。

 

サンプルコード

 

Python
 
import numpy as np

arr = np.array([1, 12, 5, -3, 8, 15])

# 配列の値を2から10の範囲にクリップ
clipped_arr = np.clip(arr, 2, 10)
print("クリップ後の配列:", clipped_arr)

 

出力例

 

クリップ後の配列: [ 2 10  5  2  8 10]

上記の例では:

  • 12より小さいため、2に。

  • 1210より大きいため、10に。

  • -32より小さいため、2に。

  • その他の値(5, 8)は範囲内なのでそのまま。

  • 1510より大きいため、10に。


 

2. 多次元配列のクリッピング

 

np.clipは多次元配列に対しても同じように機能し、各要素に独立してクリッピングが適用されます。

 

サンプルコード

 

Python
 
import numpy as np

arr_2d = np.array([[10, 20, 30],
                   [-5, 5, 15],
                   [40, 0, 25]])
print("元の配列:\n", arr_2d)

# 配列の値を0から20の範囲にクリップ
clipped_arr_2d = np.clip(arr_2d, 0, 20)
print("\nクリップ後の配列:\n", clipped_arr_2d)

 

出力例

 

元の配列:
 [[10 20 30]
 [-5  5 15]
 [40  0 25]]

クリップ後の配列:
 [[10 20 20]
 [ 0  5 15]
 [20  0 20]]

 

np.clipの応用例

 

 

1. 画像データのピクセル値の正規化

 

画像データは通常、ピクセル値が0から255の範囲にありますが、画像処理の途中でこの範囲を超えることがあります。np.clipは、値をこの範囲に収めるのに非常に便利です。

 

サンプルコード

 

Python
 
import numpy as np

# 例として、0-255の範囲をはみ出たピクセル値
image_data = np.array([50, -10, 260, 120, 300, 0], dtype=np.float32)

# ピクセル値を0から255の範囲にクリップ
clipped_pixels = np.clip(image_data, 0, 255)
print("クリップ後のピクセル値:", clipped_pixels)

 

出力例

 

クリップ後のピクセル値: [ 50.   0. 255. 120. 255.   0.]

 

2. 統計的な外れ値の処理

 

データ分析において、極端に大きな値や小さな値(外れ値)が分析結果に悪影響を与えることがあります。これらの外れ値を特定の閾値に丸める(キャップする)際にnp.clipが使えます。

 

サンプルコード

 

Python
 
import numpy as np

data = np.array([10, 1000, 50, -200, 80, 150])
lower_bound = 0
upper_bound = 100

# 外れ値を0から100の範囲にクリップ
cleaned_data = np.clip(data, lower_bound, upper_bound)
print("外れ値を処理したデータ:", cleaned_data)

 

出力例

 

外れ値を処理したデータ: [ 10 100  50   0  80 100]

 

まとめ

 

np.clipは、NumPy配列の値を指定した最小値と最大値の範囲に効率的に収めるための非常に便利な関数です。

  • 簡単な値の範囲制限: 指定したa_mina_maxの間に要素をクリップします。

  • 多次元配列にも適用可能: 2次元以上の配列でも各要素に個別に作用します。

  • データ前処理に不可欠: 画像処理でのピクセル値の正規化、統計分析での外れ値の処理など、多くの場面で活用できます。

この関数を使いこなすことで、データの品質を向上させたり、後続の処理に適した形にデータを整形したりすることが容易になります。ぜひ、あなたのNumPyワークフローに取り入れてみてください!