【问题标题】:Pairwise comparison inside array in JuliaJulia中数组内的成对比较
【发布时间】:2018-05-14 18:22:55
【问题描述】:

假设我们在 Julia 中有一个 6 元素数组,例如,Int64[1,1,2,3,3,4]。如果我们想逐元素比较两个数组,我们知道可以使用 ".==";但我的目标是在上述数组中进行所有成对比较:如果每对的元素 (i,j) 相等,则将其设置为 1(或 true),但如果它们不同,则将其设置为 0 . 所有成对比较都存储在一个 6x6 矩阵中。是否可以在没有循环的情况下在 Julia 中做到这一点?谢谢你。

【问题讨论】:

    标签: arrays comparison julia pairwise


    【解决方案1】:

    您可以使用广播将行与列进行比较的事实来简单地在数组及其转置之间进行比较:

    julia> A = [1,1,2,3,3,4]
    6-element Array{Int64,1}:
     1
     1
     2
     3
     3
     4
    
    julia> A .== A'
    6×6 BitArray{2}:
      true   true  false  false  false  false
      true   true  false  false  false  false
     false  false   true  false  false  false
     false  false  false   true   true  false
     false  false  false   true   true  false
     false  false  false  false  false   true
    

    【讨论】:

    • 哇,太棒了!!!我试过 A.== A 最后没有引号但没有成功!解决方案非常简单!谢谢!
    • 在 0.6 版上,我惊讶地发现 [a==b for a in A, b in B] 快了大约 4 倍。
    • [a == b for a in A', b in A] 在 Julia v0.7 中也快了大约 3 倍,尽管结果是 1x6x6 Array{Bool, 3}。添加squeeze 调用以获取6x6 Array{Bool, 2} 使时间回到.== 的时间。
    猜你喜欢
    • 1970-01-01
    • 2021-09-30
    • 2022-01-23
    • 2017-02-28
    • 1970-01-01
    • 2017-01-21
    • 1970-01-01
    • 2022-01-13
    相关资源
    最近更新 更多