【问题标题】:Julia: calculate an inner product using boolean algebraJulia:使用布尔代数计算内积
【发布时间】:2018-05-18 09:32:42
【问题描述】:

我有两个布尔向量 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

但我不知道如何计算总和。有什么想法吗?

【问题讨论】:

    标签: julia boolean-operations


    【解决方案1】:

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

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

    然后我可以将reducexor 函数一起使用。

    reduce(xor, a .& b)
    

    请注意,我尝试使用 in the documentation(在匿名函数中)找到的按位异或运算符 $,但该运算符已被弃用,Julia 0.6.2 建议改用 xor 函数。我确实认为拥有函数名称会使其非常整洁。

    【讨论】:

    • ,您可以通过输入 \xor 获得,也应该可以工作。
    • 您需要在 0.7 或更高版本中使用点播a .& b。您还可以通过mapreduce(x->x[1]&x[2], xor, zip(a,b)) 避免分配中间数组
    • reduce(xor, a .& b) 相比,mapreduce 版本的可读性要差很多。除非您的数组非常大,否则reduce 版本可能更可取。
    猜你喜欢
    • 1970-01-01
    • 2020-01-29
    • 1970-01-01
    • 2011-01-26
    • 1970-01-01
    • 2017-09-27
    • 1970-01-01
    • 2016-07-10
    • 1970-01-01
    相关资源
    最近更新 更多