1. 程式人生 > 程式設計 >Numpy中的陣列搜尋中np.where方法詳細介紹

Numpy中的陣列搜尋中np.where方法詳細介紹

numpy.where (condition[,x,y])

numpy.where() 有兩種用法:

1. np.where(condition,y)

滿足條件(condition),輸出x,不滿足輸出y。

如果是一維陣列,相當於[xv if c else yv for (c,xv,yv) in zip(condition,y)]

>>> aa = np.arange(10)
>>> np.where(aa,1,-1)
array([-1,1]) # 0為False,所以第一個輸出-1
>>> np.where(aa > 5,-1,1])

>>> np.where([[True,False],[True,True]],# 官網上的例子
  [[1,2],[3,4]],[[9,8],[7,6]])
array([[1,4]])

上面這個例子的條件為[[True,False]],分別對應最後輸出結果的四個值。第一個值從[1,9]中選,因為條件為True,所以是選1。第二個值從[2,8]中選,因為條件為False,所以選8,後面以此類推。類似的問題可以再看個例子:

>>> a = 10
>>> np.where([[a > 5,a < 5],[a == 10,a == 7]],[["chosen","not chosen"],["chosen","not chosen"]],[["not chosen","chosen"],["not chosen","chosen"]])

array([['chosen','chosen'],['chosen','chosen']],dtype='<U10')

2. np.where(condition)

只有條件 (condition),沒有x和y,則輸出滿足條件 (即非0) 元素的座標 (等價於numpy.nonzero)。這裡的座標以tuple的形式給出,通常原陣列有多少維,輸出的tuple中就包含幾個陣列,分別對應符合條件元素的各維座標。

>>> a = np.array([2,4,6,8,10])
>>> np.where(a > 5)  # 返回索引
(array([2,3,4]),)  
>>> a[np.where(a > 5)]   # 等價於 a[a>5]
array([ 6,10])

>>> np.where([[0,1],[1,0]])
(array([0,1]),array([1,0]))

上面這個例子條件中[[0,0]]的真值為兩個1,各自的第一維座標為[0,1],第二維座標為[1,0] 。

下面看個複雜點的例子:

>>> a = np.arange(27).reshape(3,3)
>>> a
array([[[ 0,[ 3,5],[ 6,7,8]],[[ 9,10,11],[12,13,14],[15,16,17]],[[18,19,20],[21,22,23],[24,25,26]]])

>>> np.where(a > 5)
(array([0,2,2]),array([2,array([0,2]))

# 符合條件的元素為
  [ 6,26]]]

所以np.where會輸出每個元素的對應的座標,因為原陣列有三維,所以tuple中有三個陣列。

補充

np.where和np.searchsorted同屬於Numpy陣列搜尋的一部分,這裡先介紹簡單的where

import numpy as np
a = np.array([1,5])
b = np.where(a == 5)

print(b)

where方法將會返回一個元祖

(array([4]),)

此外還將介紹一個搜尋奇數和偶數的方法(陣列全都預設使用最上面的a陣列)

可見,簡單的判斷餘數即可

c = np.where(a%2 == 0)
print(c)

d = np.where(a%2 == 1)
print(d)

返回:

(array([1,3]),)
(array([0,)

關於np.where方法到這裡就結束啦

到此這篇關於Numpy中的陣列搜尋中np.where方法詳細介紹的文章就介紹到這了,更多相關Numpy np.where 內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!