假设我有两个麻木数组:>>> 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贡献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)
添加回答
举报
0/150
提交
取消