为什么numpy.all()返回的真值用is与True比较会返回False?
问题根本原因
is运算符的判断逻辑是两个对象是否为内存中同一个实例,对比的是对象的内存地址;==运算符的判断逻辑是两个对象的值是否相等,二者的设计目标完全不同。numpy.all()方法的返回值不是 Python 原生的bool类型对象,而是 numpy 自定义的numpy.bool_类型对象。Python 原生的True是全局唯一的单例对象,而numpy.bool_类型的True是另一个独立的对象,二者内存地址不同,所以用is对比会返回False。- 二者打印结果看起来一致,是因为
numpy.bool_类型实现了和原生bool一致的字符串表示方法,视觉上没有差异,本质是完全不同的两类对象。
你可以通过以下代码验证类型差异:
# 打印Python原生True的类型 print(type(True)) # 输出:<class 'bool'> # 打印numpy.all返回结果的类型 print(type(bool_arr.all())) # 输出:<class 'numpy.bool_'>
补充说明
日常判断布尔返回值时,不需要显式和 True/False 比较,直接写如下代码即可,numpy.bool_ 类型在布尔判断上下文里会自动完成真值转换,完全符合预期:
if bool_arr.all(): # 你的业务逻辑
内容的提问来源于stack exchange,提问作者rambalachandran
相关产品推荐
相关产品推荐

