朱莉娅:用布尔代数计算内积

rod*_*ece 5 boolean-operations julia

我有两个布尔向量a = [1,1,1]b = [0,1,1]地方显然1代表true0false.

我想用布尔代数计算它们的内积.因此,我想要的结果

1*0 + 1*1 + 1*1 = 0 + 1 + 1 = 0
Run Code Online (Sandbox Code Playgroud)

因为加法扮演排他性或(XOR)的角色.

我知道产品部分可以像这样完成

a = [true, true, true] # could also use ones(Bool, 3)
b = [false, true, true]

bitwise_prod = a & b
Run Code Online (Sandbox Code Playgroud)

但我不知道怎么做.有任何想法吗?

rod*_*ece 5

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

a = [1, 1, 1]  # or ones(Int, 3)
b = [0, 1, 1]
Run Code Online (Sandbox Code Playgroud)

然后我可以使用reducexor功能.

reduce(xor, a & b)
Run Code Online (Sandbox Code Playgroud)

请注意,我尝试使用按位异或操作者$所发现的文件中(一个匿名函数内),但该运营商已被弃用,朱莉娅0.6.2建议的xor功能来代替.我认为拥有功能名称使它非常整洁.

  • 您需要在0.7或更高版本中使用点播广播的`a.&b`.你也可以避免用`mapreduce(x-> x [1]&x [2],xor,zip(a,b))来分配一个中间数组. (2认同)