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