python tilde一元运算符作为否定numpy bool数组
这应该是一个简单的问题,但我在任何地方都找不到答案。python中的python tilde一元运算符作为否定numpy bool数组,python,numpy,boolean,multidimensional-array,Python,Numpy,Boolean,Multidimensional Array,这应该是一个简单的问题,但我在任何地方都找不到答案。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])
~
运算符是一种按位反转运算符。好的我注意到了一些看似精神分裂的行为,也就是说:
~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,即使它是布尔值。因此,对于标量布尔值,~
不被视为逻辑求反。并不是说在一个整数类型的布尔值定义的numpy数组上行为是相同的
为什么~
然后作为布尔数组上的逻辑求反运算符工作(另请注意:~numpy.isfinite(numpy.inf)->True
?)
我必须在标量上使用
not()
,但not()
无法对数组求反,这是非常恼人的。然后对于一个数组,我必须使用~
,但是~
对标量求反不起作用。非
是通过非零
特殊方法实现的,它需要返回真
或假
,因此它不能给出所需的结果。相反,使用了~
运算符,该运算符通过\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。出于同样的原因,&
和|
被用来代替和或
旨在允许布尔运算符重载,但由于开销过大而被拒绝(例如,如果
语句
,则会使语句复杂化)。建议使用“elementwise”运算符的通用语法,这将提供更通用的解决方案,但已被推迟。目前的形势虽然尴尬,但似乎还不足以迫使改变
当对标量调用时,np.isfinite
返回类型为np.bool\uu
的值,而不是bool
np.bool\uu
也是从bool数据类型数组中提取标量值时得到的类型。如果您使用np.True
和np.False
代替True
和False
,您将在~
下获得一致的行为感谢ecatmur的解释,特别是提到&
和
。我不知道这些,而是使用了逻辑和和逻辑。我使用numpy
很久了,直到现在还不知道那些看似重新定义但带下划线的结构的用途,比如np.False
。这一切现在都有意义了