boolvaluepython_Python bool和numpy bool的行为到底有什么不同?

TLDR:is比较适用于Pythonbool,而不适用于numpybool_。是否存在其他差异?在

几天前我遇到了一个奇怪的布尔人行为。当我尝试对这个numpy数组使用is comparison时:arr1 = np.array([1,0,2,0], dtype=bool)

arr1

Out[...]: array([ True, False, True, False])

(这些变量名基于虚构,与真实变量名或生产代码的任何相似之处都纯属巧合)

我看到了这个结果:

^{pr2}$

这是合乎逻辑的,因为arr1不是真或假,而是numpy数组。我查过这个:arr1 == True

Out[...]: array([ True, False, True, False])

这一招如期而至。我提到这个可爱的行为,立刻就忘了。第二天我检查了数组元素的真实性:

[elem is False for elem in arr1]

它还给我这个!在

Out[...]: [False, False, False, False]

我真的很困惑,因为我记得在Python数组中(我认为问题在于数组行为):arr2 = [True, False, True, False]

[elem is False for elem in arr2]

它起作用:

Out[...]: [False, True, False, True]

而且,它在我的另一个numpy阵列中工作:very_cunning_arr = np.array([1, False, 2, False, []])

[elem is False for elem in very_cunning_arr]

Out[...]: [False, True, False, True, False]

当我深入到数组中时,我发现very_cunning_arr是由numpy.object构造的,因为有几个非数字元素,所以它包含Python bool,arr1是由numpy.bool_构造的。所以我检查了他们的行为:numpy_waka = np.bool_(True)

numpy_waka

Out[...]: Truepython_waka = True

python_waka

Out[...]: True

[numpy_waka is True, python_waka is True]

我终于发现了区别:

Out[...]: [False, True]

在所有这些之后,我有两个问题:numpy.bool_和{}在它们的共同行为中是否还有其他的不同?(我知道numpy.bool_有许多numpy函数和参数,比如.T和其他)

如果没有核的话,怎么能检查出没有灵魂的小精灵?在

(注:是的,现在我知道用is来比较真/假是不好的):Don't compare boolean values to True or False using ==.Yes: if greeting:

No: if greeting == True:

Worse: if greeting is True:

编辑1:如another question所述,numpy有自己的bool_类型。但是这个问题的细节有点不同:我发现is语句的工作方式不同,但是在这个区别之前-bool_和{}的共同行为有什么不同吗?如果是,具体是什么?在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值