2017-09-04 229 views
0

我想要形成一段代碼,如果在數組中檢測到非零數字,就會給出打印語句。嘗試我有如下:查找數組中的非零元素

if numpy.where(array != 0): 
    print "NonZero element detected!" 
elif numpy.where(array ==0): 
    print "All elements are zero" 

我也知道numpy.nonzero命令,但我真的很想拿到打印工作報表的這個如果,否則風格,我不知道如何整合正確的Python邏輯。我更感興趣的是獲得邏輯工作,而不是找到零。我似乎產生了「檢測到非零元素!」語句,而不管數組中是否有非零。有沒有關於如何實現這一點的任何想法?

+0

'where'給你一個數組的元組,每個維數組一個數組。如果沒有任何非零這些數組將具有形狀(0,),即沒有元素。所以如果你使用'where'你需要檢查其中一個數組的長度。我建議在交互式會話中試用'where'。看看它的結果應該更清楚。 – hpaulj

回答

2

可以使用any內置:

返回true,如果任何可迭代的元素是真的。如果迭代器爲空,則返回False。

if any(elt != 0 for elt in array): 
    print("Non zero detected") 
else: 
    print("All elements are zero") 

作爲獎勵,如果計算結果爲False布爾明智的唯一要素是0,你可以簡單地做:

if any(array): 
    print("Non zero detected") 
else: 
    print("All elements are zero") 
1

可以使用條件語句創建一個面具:

mask = array == 0 
print(mask) 
array([ True, False, False, True], dtype=bool) 

你可以連續使用這種具有.all.any通話,這取決於你的使用情況。如果您想檢查的所有元素是否都是零,你會怎麼做:

if (array == 0).all(): 
    print('All elements are 0!') 

或者,

if (array != 0).any(): 
    print('Non-zero elements detected!') 

等。


你可以使用np.mask同樣的事情,只要你提供兩個額外的參數:

mask = np.where(array == 0, True, False) 
print(mask) 
array([ True, False, False, True], dtype=bool) 
1

如果你正在尋找純粹是爲了檢測非數組中的零元素,爲什麼不做這樣的事情呢?還是我錯過了什麼?

arr_1 = (1,2,4,6,7,88,9) 
arr_2 = (1,2,4,6,0,7,88,9) 

print if 0 in arr_1 'Non zero detected' else 'There is no zero in array' 
+1

不應該是'print'msg1「如果數組0中的其他值爲」msg2「'? –