NumPy配列ndarrayを任意の最小値・最大値に収めるclip

Modified: | Tags: Python, NumPy

NumPy配列ndarrayの要素の値を任意の範囲内に収めるクリッピング処理を行うにはnp.clip()またはndarrayclip()メソッドを使う。引数に最小値と最大値を指定すると、その範囲外の値は最小値または最大値に置き換えられる。

本記事のサンプルコードのNumPyのバージョンは以下の通り。バージョンによって仕様が異なる可能性があるので注意。

import numpy as np

print(np.__version__)
# 1.26.1

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]

最小値と最大値のどちらか一方のみを指定したい場合は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'

a_mina_maxより大きくてもエラーにはならず、すべての値がa_maxとなる。

print(np.clip(a, 7, 2))
# [2 2 2 2 2 2 2 2 2 2]

クリップされた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]

第一引数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'>

ndarrayのclip()メソッドの使い方

ndarrayclip()メソッドでは、第一引数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]

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]

np.clip()と同様、minmaxより大きい場合は、すべての値がmaxとなる。

print(a.clip(7, 2))
# [2 2 2 2 2 2 2 2 2 2]

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]

関連カテゴリー

関連記事