You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么Python中ndarray的all()、any()返回值用is判断布尔值总返回False

Numpy的any()/all()返回值用is True/is False判断失效的原因

现象复现

相关问题可以用如下代码复现:

import numpy as np
a = np.array([True, False, True])

# 不符合预期的写法
print(a.any() is False) 
# 输出 False
print(a.any() is True)
# 输出 False

# 符合预期的写法
print(a.any() == True)
# 输出 True
print(a.any() == False)
# 输出 False

核心原因

  • Python中的is运算符判断的是两个对象是否为内存中同一个实例,对比的是对象的内存地址,不是值。Python内置的True和False是全局唯一的单例对象,只有和它们完全是同一个实例的时候is判断才会返回True。
  • Numpy的any()、all()方法返回的不是Python原生的bool类型,是numpy自定义的numpy.bool_类型对象,哪怕值和True/False完全相等,也和Python内置的True/False不是同一个内存地址的对象,所以用is判断必然返回False。
  • 而==运算符对比的是两个对象的值是否相等,numpy.bool_类型已经实现了和原生bool类型的相等比较逻辑,只要值一致就会返回True,符合预期。

你可以用如下代码验证返回值类型:

res = a.any()
print(type(res)) 
# 输出 <class 'numpy.bool_'>
print(type(True))
# 输出 <class 'bool'>

最佳实践

  • 对于numpy的布尔类返回值,不要用is True/is False做判断,优先直接用if a.any():或者if not a.all():的写法,Python会自动完成真值判断,不需要额外加比较运算符。
  • 如果需要显式比较,用==运算符即可。

内容的提问来源于stack exchange,提问作者someone_noone

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 08:06:03