如何获得布尔 numpy 数组和另一个数组的相对补集?

假设我有两个麻木数组:


>>> v1

array([ True, False, False, False,  True])

>>> v2

array([False, False,  True,  True,  True])

我正在尝试检索一个具有相同长度(5)的数组,并且包含在每个位置,其中.这将是:Truev1==True AND v2==False


array([True, False,  False,  False,  False])

在numpy中是否有一种快速的方法,例如,但考虑作为参考和查询?logical_not()v1v2


慕桂英4014372
浏览 140回答 3
3回答

潇潇雨雨

您只需要使用正确的按位运算符:v1 & ~v2 # array([ True, False, False, False, False])

茅侃侃

对于布尔值,逻辑运算和按位运算是相同的。因此,写是相当惯用的v1 & ~v2但是,这是一个按位操作,并生成一个可能不必要的 temp 数组。你不能写得像你想的那样多,因为python期望将输入转换为单个布尔值。相反,您必须调用logical_and并logical_not funcs:v1 and not v2np.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)您甚至可以就地(在以下位置)完成整个过程:v2np.logical_and(v1, np.logical_not(v2, out=v2), out=v2)

心有法竹

您可以在此处使用按位运算符:>>> v1 & ~v2 array([ True, False, False, False, False])
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python