空numpy数组bolean矛盾

时间:2018-07-18 12:33:17

标签: python arrays python-2.7 numpy

我不小心在Numpy中找到了一些我不太了解的东西。如果我检查一个空的Numpy数组是否有任何真值

    np.array([]).any()

它将评估为false,而如果我检查所有值都为真

    np.array([]).all()

它的计算结果为true。这对我来说很奇怪,因为没有值是真实的,但同时所有值都是真实的...

3 个答案:

答案 0 :(得分:4)

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

  

非数字(NaN),计算正无穷大和负无穷大   设为True,因为这些不等于零。

与以下各项进行比较:

In[102]:

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

这等效于充满NaN的数组,该数组将返回True

答案 1 :(得分:3)

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

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

请参见pseuedo-code in the docs,以了解纯Python中的逻辑。

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

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

答案 2 :(得分:1)

这是正常现象。

不可能找到一个真值,所以np.array([]).any()是False

对于数组中的每个值,该值为False(易于检查,因为数组中没有值,因此您无需检查任何内容)。