numpy.any()返回True,但"为True"比较失败

时间:2017-09-01 14:31:26

标签: python numpy

如果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

4 个答案:

答案 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总是更贵。