HOWTO · NumPy
NumPy 替換值
有三種主要方法可用於在 Python 中替換 NumPy 陣列中的值:numpy.clip() 函式、numpy.minimum() 函式和索引方法。
本頁內容
若要替換 NumPy 陣列中的值,可使用 numpy.clip(),或搭配 numpy.minimum() 與 numpy.maximum(),將數值限制在兩個界限之間。若要處理「將所有大於 5 的值替換掉」這類條件,則可使用布林索引與指派。前兩種方法會建立結果陣列,不會修改輸入;透過索引指派則會更新原始陣列。
使用 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 的值標示為真。使用這個遮罩進行索引即可選取這些元素,再指派 5,就會直接替換原陣列中的值。若要替換低於某個閾值的值,請將比較運算子改為 <;若要指定一個範圍或其他條件,可用 & 或 | 結合布林比較式,並在每個比較式外加上括號。