[英]Extract values that satisfy a condition from numpy array
說我有以下數組:
a = np.array([1,1,1,2,2,2])
b = np.array([4,6,1,8,2,1])
是否可以執行以下操作:
a[np.where(b>3)[0]]
#array([1, 1, 2])
因此,根據滿足b
條件的索引從a
選擇值,但只能使用np.where
或類似的numpy
函數?
換句話說,可以使用np.where
僅指定條件為True
時要從中獲取值的數組嗎? 還是有另一個numpy
函數可以一步完成?
是的,有一個功能: numpy.extract(condition, array)
返回從所有數值array
那satifsy的條件。
與np.where
或布爾索引np.where
,使用此功能並沒有太多好處。 所有這些方法都會創建一個臨時的布爾數組,該數組存儲b>3
的結果。 np.where
創建一個附加的索引數組,而a[b>3]
和np.extract
直接使用布爾數組。
就個人而言,我會使用a[b>3]
因為這是最有趣的形式。
只需使用布爾索引。
>>> a = np.array([1,1,1,2,2,2])
>>> b = np.array([4,6,1,8,2,1])
>>>
>>> a[b > 3]
array([1, 1, 2])
b > 3
將為您提供array([True, True, False, True, False, False])
並使用a[b > 3]
從索引數組為True
a
中選擇所有元素。
讓我們使用列表理解來解決這個問題-
a = np.array([1,1,1,2,2,2])
b = np.array([4,6,1,8,2,1])
indices = [i for i in range(len(b)) if b[i]>3] # Returns indexes of b where b > 3 - [0, 1, 3]
a[indices]
array([1, 1, 2])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.