如何获得布尔 numpy 数组和另一个数组的相对补码?
How to get the relative complement of a boolean numpy array and another?
假设我有两个 numpy 数组:
>>> v1
array([ True, False, False, False, True])
>>> v2
array([False, False, True, True, True])
我正在尝试检索一个长度相同 (5) 并且在 v1==True AND v2==False
的每个位置都包含 True
的数组。那将是:
array([True, False, False, False, False])
在 numpy 中有没有快速的方法,比如 logical_not()
但考虑 v1
作为参考,v2
作为查询?
你只需要使用正确的bitwise operators
:
v1 & ~v2
# array([ True, False, False, False, False])
您可以在此处使用 按位 运算符:
>>> v1 & ~v2
array([ True, False, False, False, False])
对于布尔值,逻辑运算和位运算是一样的。因此,写成
非常地道
v1 & ~v2
但是,这是一个按位运算,会产生一个可能不必要的临时数组。您不能随心所欲地编写 v1 and not v2
,因为 python 期望将输入转换为单个布尔值。相反,您必须调用 logical_and
and logical_not
ufuncs:
np.logical_and(v1, np.logical_not(v2))
好处是您可以避免使用临时数组,甚至可以直接写入您选择的缓冲区:
result = np.empty_like(v1)
np.logical_not(v2, out=result)
np.logical_and(v1, result, out=result)
您甚至可以就地完成所有操作(在 v2
中):
np.logical_and(v1, np.logical_not(v2, out=v2), out=v2)
假设我有两个 numpy 数组:
>>> v1
array([ True, False, False, False, True])
>>> v2
array([False, False, True, True, True])
我正在尝试检索一个长度相同 (5) 并且在 v1==True AND v2==False
的每个位置都包含 True
的数组。那将是:
array([True, False, False, False, False])
在 numpy 中有没有快速的方法,比如 logical_not()
但考虑 v1
作为参考,v2
作为查询?
你只需要使用正确的bitwise operators
:
v1 & ~v2
# array([ True, False, False, False, False])
您可以在此处使用 按位 运算符:
>>> v1 & ~v2
array([ True, False, False, False, False])
对于布尔值,逻辑运算和位运算是一样的。因此,写成
非常地道v1 & ~v2
但是,这是一个按位运算,会产生一个可能不必要的临时数组。您不能随心所欲地编写 v1 and not v2
,因为 python 期望将输入转换为单个布尔值。相反,您必须调用 logical_and
and logical_not
ufuncs:
np.logical_and(v1, np.logical_not(v2))
好处是您可以避免使用临时数组,甚至可以直接写入您选择的缓冲区:
result = np.empty_like(v1)
np.logical_not(v2, out=result)
np.logical_and(v1, result, out=result)
您甚至可以就地完成所有操作(在 v2
中):
np.logical_and(v1, np.logical_not(v2, out=v2), out=v2)