为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕桂英4014372 2022-09-13 17:17:10
假设我有两个麻木数组:>>> v1array([ True, False, False, False,  True])>>> v2array([False, False,  True,  True,  True])我正在尝试检索一个具有相同长度(5)的数组,并且包含在每个位置,其中.这将是:Truev1==True AND v2==Falsearray([True, False,  False,  False,  False])在numpy中是否有一种快速的方法,例如,但考虑作为参考和查询?logical_not()v1v2
查看完整描述

3 回答

?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

您只需要使用正确的按位运算符

v1 & ~v2
# array([ True, False, False, False, False])


查看完整回答
反对 回复 2022-09-13
?
茅侃侃

TA贡献1842条经验 获得超21个赞

对于布尔值,逻辑运算和按位运算是相同的。因此,写是相当惯用的


v1 & ~v2

但是,这是一个按位操作,并生成一个可能不必要的 temp 数组。你不能写得像你想的那样多,因为python期望将输入转换为单个布尔值。相反,您必须调用logical_and并logical_not funcs:v1 and not v2


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)


查看完整回答
反对 回复 2022-09-13
?
心有法竹

TA贡献1866条经验 获得超5个赞

您可以在此处使用按位运算符:

>>> v1 & ~v2
array([ True, False, False, False, False])


查看完整回答
反对 回复 2022-09-13
  • 3 回答
  • 0 关注
  • 139 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信