在数组

时间:2017-09-04 21:25:56

标签: python arrays numpy logic

我想形成一段代码,如果在数组中检测到非零数字,则会给出print语句。我的尝试如下:

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

我也知道numpy.nonzero命令,但我真的很想得到这个,如果其他样式的打印语句工作,我不知道如何正确地合并python逻辑。我对使逻辑工作更感兴趣而不是找到零。我有什么似乎产生了“检测到NonZero元素!”无论数组中是否存在非零,都会声明。有任何想法如何实现这一点?

3 个答案:

答案 0 :(得分:2)

您可以使用内置的any

  

如果iterable的任何元素为true,则返回True。如果iterable为空,则返回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 :(得分: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)

答案 2 :(得分: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'