Julia中数组内部的成对比较

coo*_*lsv 0 arrays comparison julia pairwise

例如,假设我们在Julia中有一个6元素数组Int64[1,1,2,3,3,4].如果我们想要按元素比较两个数组,我们知道我们可以使用".=="; 但我的目标是在上面的数组中进行所有成对比较:如果每对中的元素(i,j)相等,我将其设置为1(或者为真),但如果它们不同,我将其设置为0所有成对比较都存储在6x6矩阵中.没有循环可以在朱莉娅那样做吗?谢谢.

Chr*_*kas 12

您可以使用广播将行与列进行比较的事实,只需在数组与其转置之间进行比较:

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
Run Code Online (Sandbox Code Playgroud)

  • 在版本0.6中,我惊奇地发现`[a = a b代表A,B代表B]`大约快4倍. (3认同)
  • 在Julia v0.7中,[[a = a中的a的b,A中的b]]的速度也快了大约3倍,尽管结果是1x6x6 Array {Bool,3}。添加`squeeze`调用以获取`6x6 Array {Bool,2}`可使时间回到`。==`的时间。 (2认同)