就是使用numpy.where
。
在 numpy.where()
函數的語法中,方括號 []
表示其中的參數是可選的。而斜杠 /
表示斷行符號,它的作用是將一行的代碼分成多行以提高可讀性。
所以 [x, y, ]/
表示這兩個參數 x
和 y
是可選的,可以根據需要提供或者省略。
numpy.where(condition, [x, y, ]/)
condition
:布林陣列或布林條件。x, y
:選擇性參數,用於指定根據 condition
中的 True
和 False
元素所返回的結果。如果省略,則 numpy.where()
函數將返回一個包含滿足 condition
的元素的索引的元組。這個函數可以根據 condition
中的值,返回不同的結果。如果提供了 x
和 y
,則 numpy.where()
將根據 condition
中的值選擇性地返回 x
或 y
中的元素。
numpy.where()
將返回一個包含滿足條件的元素的索引的元組。
numpy.where(condition)
在這種基本用法中,condition
是一個布林陣列,它描述了你希望在陣列中查找的條件。
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
indices = np.where(arr > 2)
print(indices) # 输出: (array([2, 3, 4]),)
indices = np.where(arr > 2)[0] #單純只取索引值
print(indices) # 输出: [2, 3, 4]
numpy.where(condition, x, y)
在這種形式中,condition
是一個布林陣列,x
和 y
是兩個具有相同形狀的陣列,它們分別對應於 condition
中 True
和 False
的元素。
numpy.where()
函數將返回一個新的陣列,其中 condition
中的 True
元素被替換為 x
中對應的元素,而 False
元素被替換為 y
中對應的元素。
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
result = np.where(arr > 2, 'yes', 'no')
print(result) # 输出: ['no' 'no' 'yes' 'yes' 'yes']
滿足條件則該元素*10,沒有則保持原狀。
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
result = np.where(arr > 2, arr, arr * 10)
print(result) # 输出: [10 20 3 4 5]
np.where(condition1, x, np.where(condition2, y, z))
這種形式中,首先根據 condition1
執行 np.where()
,然後根據 condition2
選擇 y
或 z
中的元素。如果 condition1
為 True
,則返回 x
,否則根據 condition2
返回 y
或 z
中的元素。
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
result = np.where(arr > 2, '比二大', np.where(arr < 2, '比二小', '等於二'))
print(result) # 输出: ['比二小' '等於二' '比二大' '比二大' '比二大']
第一次根據條件 arr > 2
選擇返回的值。如果條件為真,則返回 '比二大'
;否則進行第二次 numpy.where()
調用,根據條件 arr < 2
選擇返回的值。如果條件為真,則返回 '比二小'
;否則返回 '等於二'
。
這些是 numpy.where()
函數的基本語法形式,通過適當地使用它們,你可以根據不同的需求靈活地進行陣列元素的選擇和替換。
我最常就是應用在影像處理上,得到相對應於圖像中座標值。
以下是我其他文章,有應用到numpy.where()
這個方法的應用
[OpenCV應用][Python]利用numpy找出物件邊緣求出寬度及高度
https://numpy.org/doc/stable/release/1.23.0-notes.html#faster-np-where