[Python][NumPy]如何在 Numpy 數組中查找值的索引?

2024/03/13閱讀時間約 5 分鐘

如何在 Numpy 數組中查找值的索引?

就是使用numpy.where

語法:

numpy.where() 函數的語法中,方括號 [] 表示其中的參數是可選的。而斜杠 / 表示斷行符號,它的作用是將一行的代碼分成多行以提高可讀性。

所以 [x, y, ]/ 表示這兩個參數 xy 是可選的,可以根據需要提供或者省略。

numpy.where(condition, [x, y, ]/)
  • condition:布林陣列或布林條件。
  • x, y:選擇性參數,用於指定根據 condition 中的 TrueFalse 元素所返回的結果。如果省略,則 numpy.where() 函數將返回一個包含滿足 condition 的元素的索引的元組。

這個函數可以根據 condition 中的值,返回不同的結果。如果提供了 xy,則 numpy.where() 將根據 condition 中的值選擇性地返回 xy 中的元素。


基本用法

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 是一個布林陣列,xy 是兩個具有相同形狀的陣列,它們分別對應於 conditionTrueFalse 的元素。

numpy.where() 函數將返回一個新的陣列,其中 condition 中的 True 元素被替換為 x 中對應的元素,而 False 元素被替換為 y 中對應的元素。

範例1

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']

範例2

滿足條件則該元素*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 選擇 yz 中的元素。如果 condition1True,則返回 x,否則根據 condition2 返回 yz 中的元素。

範例

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





49會員
87內容數
Python程式設計師,不是在學習就是在學習的路上
留言0
查看全部
發表第一個留言支持創作者!