我不小心在Numpy中找到了一些我不太了解的东西。如果我检查一个空的Numpy数组是否有任何真值
np.array([]).any()
它将评估为false,而如果我检查所有值都为真
np.array([]).all()
它的计算结果为true。这对我来说很奇怪,因为没有值是真实的,但同时所有值都是真实的...
答案 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(易于检查,因为数组中没有值,因此您无需检查任何内容)。