【问题标题】:Finding nonzero elements in an array在数组中查找非零元素
【发布时间】:2017-09-04 21:25:55
【问题描述】:

如果在数组中检测到非零数,我想编写一段代码来给出打印语句。我的尝试如下:

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

我也知道 numpy.nonzero 命令,但我真的很想得到这个 if,否则打印语句的样式可以正常工作,我不确定如何正确合并 python 逻辑。我对让逻辑正常工作比我找到零更感兴趣。我所拥有的似乎产生了“检测到非零元素!”不管数组中是否有非零值。关于如何实现这一点有什么想法吗?

【问题讨论】:

  • where 为您提供一组数组,每个维度一个数组。如果没有任何非零,这些数组将具有形状 (0,),即没有元素。因此,如果您使用where,您需要检查其中一个数组的长度。我建议在交互式会话中尝试where。查看其结果应该会更清楚。

标签: python arrays numpy logic


【解决方案1】:

您可以使用any 内置:

如果可迭代的任何元素为真,则返回真。如果 iterable 为空,则返回 False。

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

作为奖励,如果计算结果为 False Boolean-wise 的唯一元素是 0,您可以这样做:

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

【讨论】:

    【解决方案2】:

    您可以使用条件创建掩码:

    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)
    

    【讨论】:

      【解决方案3】:

      如果您纯粹是为了检测数组中的非零元素,为什么不做这样的事情......或者我错过了什么?

      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'
      

      【讨论】:

      • 不应该是print "msg1" if 0 in array else "msg2"吗?
      猜你喜欢
      • 1970-01-01
      • 2015-11-25
      • 2014-12-24
      • 2017-12-05
      • 1970-01-01
      • 2014-06-03
      • 1970-01-01
      • 1970-01-01
      • 2014-06-08
      相关资源
      最近更新 更多