应该是一个简单的问题,但我无法在任何地方找到答案。这~
python 中的运算符被记录为按位反转运算符。美好的。不过,我注意到看似精神分裂的行为,即:
~True -> -2
~1 -> -2
~False -> -1
~0 -> -1
~numpy.array([True,False],dtype=int) -> array([-2,-1])
~numpy.array([True,False],dtype=bool) -> array([False,True])
在前 4 个示例中,我可以看到 python 正在实现(如文档所示)~x = -(x+1)
,输入被视为 int即使它是布尔值。因此,对于标量布尔值,~
不被视为逻辑否定。并不是说,在使用 int 类型的布尔值定义的 numpy 数组上,行为是相同的。
为什么~
然后用作布尔数组上的逻辑否定运算符(另请注意:~numpy.isfinite(numpy.inf) -> True
?)?
我必须使用这非常烦人not()
在标量上,但是not()
无法对数组求反。然后对于数组,我必须使用~
, but ~
无法否定标量...
not
是通过__nonzero__
特殊方法,需要返回True
or False
,因此无法给出所需的结果。相反,~
使用运算符,它是通过__not__
特殊方法。为了同样的原因,&
and |
用来代替and
and or
.
PEP 335 http://www.python.org/dev/peps/pep-0335/旨在允许布尔运算符重载,但由于开销过大而被拒绝(例如,它会使if
声明)。PEP 225 http://www.python.org/dev/peps/pep-0225/建议“逐元素”运算符的通用语法,这将提供更通用的解决方案,但已被推迟。看来目前的情况虽然尴尬,但还没有痛苦到足以迫使人们做出改变。
np.isfinite
当对标量调用时,返回类型的值np.bool_
, not bool
. np.bool_
也是从 bool 数据类型数组中提取标量值时获得的类型。如果你使用np.True_
and np.False_
代替True
and False
你会得到一致的行为~
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)