NumPy配列ndarrayを任意の最小値・最大値に収めるclip
NumPy配列ndarray
の要素の値を任意の範囲内に収めるクリッピング処理を行うにはnp.clip()
またはndarray
のclip()
メソッドを使う。引数に最小値と最大値を指定すると、その範囲外の値は最小値または最大値に置き換えられる。
本記事のサンプルコードのNumPyのバージョンは以下の通り。バージョンによって仕様が異なる可能性があるので注意。
import numpy as np
print(np.__version__)
# 1.26.1
source: numpy_clip.py
np.clip()の使い方
np.clip()
では、第一引数a
に処理する配列ndarray
、第二引数a_min
に最小値、第三引数a_max
に最大値を指定する。
a = np.arange(10)
print(a)
# [0 1 2 3 4 5 6 7 8 9]
print(np.clip(a, 2, 7))
# [2 2 2 3 4 5 6 7 7 7]
source: numpy_clip.py
最小値と最大値のどちらか一方のみを指定したい場合はNone
を使う。省略はできない。
print(np.clip(a, None, 7))
# [0 1 2 3 4 5 6 7 7 7]
print(np.clip(a, 2, None))
# [2 2 2 3 4 5 6 7 8 9]
# print(np.clip(a, 2))
# TypeError: clip() missing 1 required positional argument: 'a_max'
source: numpy_clip.py
a_min
がa_max
より大きくてもエラーにはならず、すべての値がa_max
となる。
print(np.clip(a, 7, 2))
# [2 2 2 2 2 2 2 2 2 2]
source: numpy_clip.py
クリップされたndarray
を返し、元のndarray
はそのまま変化なし。
a_clip = np.clip(a, 2, 7)
print(a_clip)
# [2 2 2 3 4 5 6 7 7 7]
print(a)
# [0 1 2 3 4 5 6 7 8 9]
source: numpy_clip.py
第一引数a
にはndarray
だけでなく、Python組み込みのリストなどのいわゆるarray-likeオブジェクトを指定可能。返り値は常にndarray
。
l = list(range(10))
print(l)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(np.clip(l, 2, 7))
# [2 2 2 3 4 5 6 7 7 7]
print(type(np.clip(l, 2, 7)))
# <class 'numpy.ndarray'>
source: numpy_clip.py
ndarrayのclip()メソッドの使い方
ndarray
のclip()
メソッドでは、第一引数min
に最小値、第二引数max
に最大値を指定する。
a = np.arange(10)
print(a)
# [0 1 2 3 4 5 6 7 8 9]
print(a.clip(2, 7))
# [2 2 2 3 4 5 6 7 7 7]
print(a.clip(None, 7))
# [0 1 2 3 4 5 6 7 7 7]
print(a.clip(2, None))
# [2 2 2 3 4 5 6 7 8 9]
source: numpy_clip.py
np.clip()
と異なり、第一引数min
、第二引数max
にデフォルト値None
が設定されているため省略してもよい。np.clip()
と引数名が微妙に違うので、キーワード引数として引数名で指定する場合は注意。
print(a.clip(2))
# [2 2 2 3 4 5 6 7 8 9]
print(a.clip(min=2))
# [2 2 2 3 4 5 6 7 8 9]
print(a.clip(max=7))
# [0 1 2 3 4 5 6 7 7 7]
source: numpy_clip.py
np.clip()
と同様、min
がmax
より大きい場合は、すべての値がmax
となる。
print(a.clip(7, 2))
# [2 2 2 2 2 2 2 2 2 2]
source: numpy_clip.py
np.clip()
と同様、クリップされたndarray
を返し、元のndarray
はそのまま変化なし。
a_clip = a.clip(2, 7)
print(a_clip)
# [2 2 2 3 4 5 6 7 7 7]
print(a)
# [0 1 2 3 4 5 6 7 8 9]
source: numpy_clip.py