编程语言
首页 > 编程语言> > python – Numpy Bool数组上的布尔运算符之和(Bug?)

python – Numpy Bool数组上的布尔运算符之和(Bug?)

作者:互联网

在使用numpy的数组时,我遇到了一个令人惊讶的情况.以下代码

(True==True)+(True==True)

正如人们所期望的那样,返回2.而

import numpy
Array=numpy.zeros((2,2),dtype=bool)
(Array[0][0]==Array[0][0])+(Array[1][0]==Array[1][0])

返回True.这导致:

(Array[0][0]==Array[0][0])+(Array[1][0]==Array[1][0])-1

返回0,而

(Array[0][0]==Array[0][0])-1+(Array[1][0]==Array[1][0])

返回1,使得总和不可交换!

这是有意的吗?如果是这样,为什么?

解决方法:

似乎numpy.bool_与vanilla Python bool的行为略有不同:

>>> int(True+True) == int(True) + int(True)
True
>>> int(numpy.bool_(1)+numpy.bool_(1)) == int(numpy.bool_(1)) + int(numpy.bool_(1))
False

这是因为:

>>> True+True
2
>>> numpy.bool_(1)+numpy.bool_(1)
True
>>> int(numpy.bool_(1)+numpy.bool_(1))
1

基本上,numpy.bool_的添加操作是合乎逻辑的,而不是数字的;与bool获得相同的行为:

>>> int(True and True)
1

如果您只是按照预期使用它来保证真实性,那么这很好,但是如果您尝试在整数上下文中使用它而没有明确说明,那么您最终会感到惊讶.只要您明确,就会恢复预期的行为:

>>> int(numpy.bool_(1)) + int(numpy.bool_(1))
2

标签:boolean-operations,python,arrays,numpy,python-2-7
来源: https://codeday.me/bug/20190830/1767044.html