HOWTO · NumPy
NumPy 置換値
Python で NumPy 配列内の値を置き換えるために使用できる主なメソッドは、numpy.clip()関数、numpy.minimum()関数、およびインデックス付けメソッドの 3つです。
このページの内容
NumPy 配列の値を置き換えるには、numpy.clip() を使うか、numpy.minimum() と numpy.maximum() を組み合わせて値を上下限の範囲に収めます。「5を超える値をすべて置き換える」といった条件を使う場合は、ブールインデックスで要素を選択して代入します。最初の2つの方法は結果の配列を作り、入力配列は変更しません。インデックスを使った代入では、元の配列が更新されます。
numpy.clip() 関数で NumPy の値を置き換える
すべての値を下限と上限の範囲内に収めるには、numpy.clip() を使います。下限より小さい値は下限に、上限より大きい値は上限になります。out 引数を指定しない場合、この関数は範囲内に収めた結果の配列を返し、入力配列は変更しません。次の例を実行してください。
このセクションのコードと表示されるラベルや出力は英語のままです。
import numpy as np
array = np.array([1, 2, 3, 4, 5, 5, 6, 7, 8, 8, 9, 9])
result = np.clip(array, 0, 5)
print(result)
出力:
[1 2 3 4 5 5 5 5 5 5 5 5]
ここでは、0 が下限、5 が上限です。その範囲内にある値はそのまま残り、上限を超える値は 5 に置き換えられます。戻り値を result に代入すると、後続の計算に元の array を使えます。
numpy.minimum() 関数と numpy.maximum() 関数で NumPy の値を置き換える
numpy.minimum() と numpy.maximum() を使っても、同じ上下限を適用できます。まず numpy.minimum() は、配列の各値と 5 の小さい方を選び、上限を適用します。次に numpy.maximum() は、中間結果の各値と 0 の大きい方を選び、下限を適用します。どちらの演算も配列を返すため、この方法でも array は変更されません。
このセクションのコードと表示されるラベルや出力は英語のままです。
import numpy as np
array = np.array([1, 2, 3, 4, 5, 5, 6, 7, 8, 8, 9, 9])
result1 = np.minimum(array, 5)
result2 = np.maximum(result1, 0)
print(result2)
出力:
[1 2 3 4 5 5 5 5 5 5 5 5]
上下限を両方適用する場合は、順序が重要です。まず上限を適用し、その後で下限未満の値を引き上げます。5 と 0 は、必要な上限と下限に置き換えてください。片方の限界だけを適用する場合は、上限なら numpy.minimum()、下限なら numpy.maximum() を単独で使います。
Python で配列インデックスを使って NumPy の値を置き換える
条件に基づいて値を置き換えるには、ブールマスクで該当する要素を選び、その選択箇所に置換値を代入します。値をしきい値と比較して置き換えるなど、単に上下限を指定するだけではないルールに便利です。この代入は元の配列を更新するため、元の値を残したい場合は先にコピーを作成してください。
このセクションのコードと表示されるラベルや出力は英語のままです。
import numpy as np
array = np.array([1, 2, 3, 4, 5, 5, 6, 7, 8, 8, 9, 9])
array[array > 5] = 5
print(array)
出力:
[1 2 3 4 5 5 5 5 5 5 5 5]
array > 5 という式は、5 より大きい各値に対して True となるブールマスクを作ります。このマスクでインデックスを指定すると該当する要素が選ばれ、5 を代入するとその場で値が置き換わります。しきい値より小さい値を置き換えるには比較を < に変更します。範囲や別の条件を指定するには、ブール比較を & または | で組み合わせ、各比較式を括弧で囲みます。