【发布时间】:2018-12-26 09:08:06
【问题描述】:
我无意中在 Numpy 中发现了一些我无法真正理解的东西。如果我检查一个空的 Numpy 数组是否有任何真值
np.array([]).any()
它将评估为假,而如果我检查所有值是否为真
np.array([]).all()
它评估为真。这对我来说很奇怪,因为没有值是真的,但同时所有的值都是真的......
【问题讨论】:
标签: python arrays python-2.7 numpy
我无意中在 Numpy 中发现了一些我无法真正理解的东西。如果我检查一个空的 Numpy 数组是否有任何真值
np.array([]).any()
它将评估为假,而如果我检查所有值是否为真
np.array([]).all()
它评估为真。这对我来说很奇怪,因为没有值是真的,但同时所有的值都是真的......
【问题讨论】:
标签: python arrays python-2.7 numpy
这不是错误,它返回True,因为所有值都不等于零,这是返回True 的标准,请参阅以下note:
非数字 (NaN),正无穷和负无穷求值 为 True,因为它们不等于 0。
与以下比较:
In[102]:
np.array([True,]).all()
Out[102]: True
这相当于一个包含NaN 的数组,它将返回True
【讨论】:
numpy 遵循的约定,我们可以将其标记为欺骗,但让我们看看其他人是否同意跨度>
您看到的逻辑并非特定于 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。
【讨论】:
这是正常现象。
找不到真值,所以np.array([]).any()为假
对于数组中的每个值,这个值都是False(很容易检查,因为数组中没有值,所以你不需要检查任何东西)。
【讨论】: