2017-05-31 43 views
0

我有一個numpy數組,名爲a,我想檢查它是否包含一個範圍內的項目,由兩個值指定。如何有效地檢查numpy數組是否包含給定範圍內的項目?

import numpy as np 
a = np.arange(100) 

mintrshold=33 
maxtreshold=66 

我的解決辦法:

goodItems = np.zeros_like(a) 
goodItems[(a<maxtreshold) & (a>mintrshold)] = 1 

if goodItems.any(): 
    print (there s an item within range) 

您能否提供我一個更有效,Python的方式?

+0

我不知道numpy的本身,但與正常的Python列表我會寫它像;如果有的話(mintrshold EzzatA

回答

2

numpy陣列不適用pythonic a < x < b。但有FUNC鍵此:

np.logical_and(a > mintrshold, a < maxtreshold) 

np.logical_and(a > mintrshold, a < maxtreshold).any() 
你的具體情況

。基本上,你應該結合兩個元素的操作。尋找logic funcs更多細節

+0

謝謝,它比我天真的解決方案更加優雅和快2.5倍。 – user3598726

1

添加到純numpy的答案,我們還可以使用itertools

import itertools 

bool(list(itertools.ifilter(lambda x: 33 <= x <= 66, a))) 

對於較小的陣列,這將足夠了:

bool(filter(lambda x: 33 <= x <= 66, a)) 
+0

我嘗試了你的第二行,但它不起作用,總是成爲真 – user3598726

+0

我認爲這是所需的輸出,如果數組中的數字確實落在該條件內,則返回「True」。如果你需要列表/返回的布爾數組讓我知道,我可以修改它。 –

+0

你很好地解釋了我的問題,但是如果a = np.arange(100,120),你的第二行仍然返回True – user3598726

相關問題