2013-08-23 46 views
39

我們初始化與零的numpy的陣列波紋管:測試是否numpy的數組只包含零

np.zeros((N,N+1)) 

但是我們如何檢查在一個給定的N * N numpy的數組矩陣的所有元素是否爲零。
該方法只需要返回一個True,如果所有的值都爲零。

回答

28

結賬numpy.count_nonzero

>>> np.count_nonzero(np.eye(4)) 
4 
>>> np.count_nonzero([[0,1,7,0,0],[3,0,0,2,19]]) 
5 
+3

你會想'不np.count_nonzero(np.eye(4))'返回TRUE;只有當所有的值都爲0。 –

28

我會用np.all這裏,如果你有一個數組:

>>> np.all(a==0) 
+0

我喜歡非零個值這個答案檢查,以及。例如,可以通過執行'np.all(a == a [0])'來檢查數組中的所有元素是否相同。非常感謝! –

84

張貼在這裏會工作的其他答案,但使用最清晰,最有效的功能是numpy.any()

>>> all_zeros = not np.any(a) 

>>> all_zeros = not a.any() 
  • 這比numpy.all(a==0)更受歡迎,因爲它使用更少的RAM。 (它不需要由a==0術語創建的臨時陣列。)
  • 此外,它比numpy.count_nonzero(a)更快,因爲它可以在找到第一個非零元素時立即返回。
+0

我不確定我是否同意這是最明智的解決方案。 – Akavall

-3

如果你對所有零測試,以避免對其他numpy的功能,然後包裝在一個try行警告,除非塊將保存有你感興趣的,即在手術前做測試的零

try: # removes output noise for empty slice 
    mean = np.mean(array) 
except: 
    mean = 0 
相關問題