【问题标题】:Empty numpy array boolean contradiction [duplicate]空numpy数组布尔矛盾[重复]
【发布时间】:2018-12-26 09:08:06
【问题描述】:

我无意中在 Numpy 中发现了一些我无法真正理解的东西。如果我检查一个空的 Numpy 数组是否有任何真值

    np.array([]).any()

它将评估为假,而如果我检查所有值是否为真

    np.array([]).all()

它评估为真。这对我来说很奇怪,因为没有值是真的,但同时所有的值都是真的......

【问题讨论】:

    标签: python arrays python-2.7 numpy


    【解决方案1】:

    这不是错误,它返回True,因为所有值都不等于零,这是返回True 的标准,请参阅以下note:

    非数字 (NaN),正无穷和负无穷求值 为 True,因为它们不等于 0。

    与以下比较:

    In[102]:
    
    np.array([True,]).all()
    Out[102]: True
    

    这相当于一个包含NaN 的数组,它将返回True

    【讨论】:

    • 我不认为这是一个错误。我只是无法理解。但现在它是有道理的。因此,虽然 any() 正在搜索 true,但 all() 正在搜索 false。感谢您的帮助...
    • 我认为可能的欺骗:stackoverflow.com/questions/19389490/… 解释了这种行为,所以我认为这是numpy 遵循的约定,我们可以将其标记为欺骗,但让我们看看其他人是否同意跨度>
    【解决方案2】:

    您看到的逻辑并非特定于 NumPy。这是已在 NumPy 中实现的 Python 约定:

    • 如果任何值为 True,any 将返回 True。否则False。
    • 如果没有值是 False,all 返回 True。否则True。

    查看pseuedo-code in the docs 以查看纯 Python 中的逻辑。

    对于np.array([]).any() 或any([]),没有True 值,因为您有一个0 维数组或0 长度列表。因此,结果为False。

    对于np.array([]).all() 或all([]),没有False 值,因为您有一个0 维数组或0 长度列表。因此,结果为True。

    【讨论】:

      【解决方案3】:

      这是正常现象。

      找不到真值,所以np.array([]).any()为假

      对于数组中的每个值,这个值都是False(很容易检查,因为数组中没有值,所以你不需要检查任何东西)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-02-02
        • 2019-12-07
        • 1970-01-01
        • 1970-01-01
        • 2017-01-01
        • 2014-06-25
        • 2017-11-06
        相关资源
        最近更新 更多