Julia: 使用布尔代数计算内积

7
我有两个布尔向量 a = [1,1,1]b = [0,1,1],其中显然 1 代表 true0 代表 false
我想使用布尔代数计算它们的内积。因此,我想要的结果是:
1*0 + 1*1 + 1*1 = 0 + 1 + 1 = 0

因为加法扮演XOR(异或)的角色。
我知道可以这样完成乘积部分。
a = [true, true, true] # could also use ones(Bool, 3)
b = [false, true, true]

bitwise_prod = a .& b

但我不知道如何做求和。有什么想法吗?

1个回答

5

我现在找到了一个好方法。首先,我不需要使用布尔变量。

a = [1, 1, 1]  # or ones(Int, 3)
b = [0, 1, 1]

我可以使用reduce函数和xor操作进行处理。

reduce(xor, a .& b)

请注意,我尝试使用位异或运算符$,它在匿名函数中发现于文档中,但这个运算符已经被弃用,Julia 0.6.2建议使用xor函数。我认为函数名字很整洁。

1
,你也可以通过输入\xor来获得。 - phipsgabler
3
在0.7版本或更高版本中,您需要使用点广播a.& b。您也可以通过mapreduce(x->x[1]&x[2], xor, zip(a,b))来避免分配中间数组。 - Simon Byrne
mapreduce 版本的可读性要比 reduce(xor, a .& b) 差得多。除非你的数组非常大,否则 reduce 版本可能更可取。 - Sundar R

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接