如果numpy.any()
返回True
,则与is True
的比较失败但== True
有效。有谁知道为什么?
最小的例子
from __future__ import print_function
import numpy
a = numpy.array([True])
if a.any() == True:
print('== works')
if a.any() is True:
print('is works')
此代码的输出仅为== works
。
答案 0 :(得分:6)
numpy
拥有自己的布尔值numpy.True_
和numpy.False_
,它们与Python的本地布尔值具有不同的身份。无论如何,您应该使用==
进行此类权益比较
>>> a.any() is True
False
>>> a.any() is numpy.True_
True
>>> True is numpy.True_
False
>>> True == numpy.True_
True
答案 1 :(得分:3)
回报的类型不同:
>>> type(a.any())
<type 'numpy.bool_'>
>>> type(True)
<type 'bool'>
所以,a.any()不是True
因此,它只等于True
。
答案 2 :(得分:3)
那是因为a.any()
没有返回标准Python True
(类bool
的实例)。
>>> type(a.any())
<type 'numpy.bool_'>
简而言之,numpy有自己的True值,但是当你打印它时,它看起来就像是True
内置的Python。
答案 3 :(得分:1)
numpy.any
会返回numpy.bool_
,这是numpy使用的different datatype。
因此,您无法使用身份检查将numpy.bool_
与Python bool
进行比较。你必须使用numpy的true
然后:numpy.True_
>>> a.any() is numpy.True_
True
他们不使用Python bool
的主要原因是因为numpy.bool_
只是一个字节,而Python bool
基于Python int
总是更贵。