为什么当我使用“ is”而不是“ ==”时np.all返回错误的值?

时间:2019-05-24 22:17:57

标签: python numpy

因此,我在代码中找到了一个错误,可以复制以下内容。基本上,我需要检查np.ndarray中的所有元素是否都不为0。

>>> a = np.ones((3,3))
>>> np.all(a == 0) == False
True

好的,a中的所有值都不为零。我知道我也可以做np.all((a == 0) == False)来明确地要求将其与0进行比较,但是起初我没有这样做,这使我意识到将is==进行比较时存在差异在False情况下。

>>> np.all(a == 0) is False
False

我知道is应该比较对象是否指向同一个对象。但这是否意味着我返回了False的两个值实际上并不指向相同的False?我可能只是对此太想了...

1 个答案:

答案 0 :(得分:5)

返回类型为numpy.bool_而不是bool

In [11]: type(np.all(a == 0))
Out[11]: numpy.bool_

In [12]: type(False)
Out[12]: bool

is检查断言两个对象指向same object