我能否使用~A
来反转一个numpy布尔数组,而不是使用相当笨拙的函数np.logical_and()
和np.invert()
?
事实上,~
似乎可以正常工作,但我在任何numpy参考手册中都找不到它,更令人担忧的是,它肯定不能处理标量(例如,bool(~True)
返回True
!),所以我有点担心……
我能否使用~A
来反转一个numpy布尔数组,而不是使用相当笨拙的函数np.logical_and()
和np.invert()
?
事实上,~
似乎可以正常工作,但我在任何numpy参考手册中都找不到它,更令人担忧的是,它肯定不能处理标量(例如,bool(~True)
返回True
!),所以我有点担心……
简短回答:是的。
参考文献:
http://docs.scipy.org/doc/numpy/reference/generated/numpy.invert.html
注意:
计算输入数组中整数的底层二进制表示的按位NOT。此ufunc实现C/Python运算符~。
和
bitwise_not是invert的别名:
>> np.bitwise_not is np.invert
>> True
boolean not
和logic not
始终不同。问题和答案都涉及到了boolean not
。无论如何,谢谢您提醒。 - squiddtype=bool
的情况。我刚好遇到了一个由 True
和 False
对象组成且 dtype=object
的数组的边缘情况。这些被转换为 ~True => -2
和 ~False => -1
。请参见问题评论中链接的重复目标。 - Joooeey如果数组的 dtype
是布尔类型,并且您确定随着软件成熟,这种情况不会改变,那么您可以使用波浪号。然而,np.logical_not
有两个优点:
np.nan
或其他对象出现在您的数组中,它们很容易显示出来。还有 np.invert
,但它不能用于对象数组,而且这个词是有歧义的。
~np.array([False, True], dtype=bool)
Out[7]: array([ True, False])
~np.array([False, True], dtype=object)
Out[9]: array([-1, -2], dtype=object)
np.invert([True, False])
Out[4]: array([False, True])
np.invert((np.array([True, False], dtype=object)))
Out[5]: array([-2, -1], dtype=object)
np.logical_not(np.array([False, True], dtype=bool))
Out[8]: array([ True, False])
np.logical_not(np.array([False, True], dtype=object))
Out[10]: array([True, False], dtype=object)