Python 当我使用“时,为什么np.all返回错误的值;是";相比于==&引用;?
所以我在我的代码中找到了一个bug,可以用下面的代码重现它。基本上,我需要检查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
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
。