2013-08-23 48 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 
相关问题