Python 当我使用“时,为什么np.all返回错误的值;是";相比于==&引用;?

Python 当我使用“时,为什么np.all返回错误的值;是";相比于==&引用;?,python,numpy,Python,Numpy,所以我在我的代码中找到了一个bug,可以用下面的代码重现它。基本上,我需要检查np.ndarray中的所有元素是否都不是0 >>> a = np.ones((3,3)) >>> np.all(a == 0) == False True 很好,a中的所有值都不是零。我知道我也可以做np.all((a==0)==False)而不是显式要求与0进行比较,但我一开始没有这样做,这让我意识到在False情况下比较is与=是有区别的 >>> np.al

所以我在我的代码中找到了一个bug,可以用下面的代码重现它。基本上,我需要检查
np.ndarray
中的所有元素是否都不是0

>>> a = np.ones((3,3))
>>> np.all(a == 0) == False
True
很好,
a
中的所有值都不是零。我知道我也可以做
np.all((a==0)==False)
而不是显式要求与0进行比较,但我一开始没有这样做,这让我意识到在
False
情况下比较
is
=
是有区别的

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

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

返回类型是
numpy.bool\ucode>而不是
bool

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

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

is
检查断言有两个对象指向。这似乎证实了原因:差异确实是因为类是传出的。当,我认为
np。all
返回的类型与我习惯的
all
相同。我应该先检查一下。谢谢@Chrispresso,你不应该使用
is
,即使是“我习惯了的
all
”——它不是在测试你真正想要测试的东西。关于此运算符的唯一常见有效用法是
X是None