两个数组的行交叉

Jer*_*ong 1 julia

我刚刚从MATLAB切换到Julia,我正在寻找一种方法来逐行找到两个数组的交集.例如,如果C = [1 0; 0 1],D = [-1 0; 0 1],则输出将是B,ind1,ind2 = [0 1],2,2.

MATLAB对应的是:[B,ind1,ind2] = intersect(C,D,'rows')

我怎样才能做到这一点?某个模块中是否有内置函数可以启用此操作?

Dan*_*etz 5

限定:

function intersectML(ms::Array...)
  t = map(x->Dict(x[2][i,:]=>(x[1],i) for i=1:size(x[2],1)),enumerate(ms))
  u = intersect(map(keys,t)...)
  return (u,map(x->[x[r][2] for r in u],t)...)
end
Run Code Online (Sandbox Code Playgroud)

然后你有:

julia> C = [1 0;0 1]; D = [-1 0;0 1]

julia> intersectML(C,D)
(Array{Int64,1}[[0,1]],[2],[2])
Run Code Online (Sandbox Code Playgroud)