两个数组的行交叉

时间:2017-03-11 15:21:16

标签: 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')

我该怎么做?某个模块中是否有内置函数可以启用此操作?

1 个答案:

答案 0 :(得分: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

然后你有:

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

julia> intersectML(C,D)
(Array{Int64,1}[[0,1]],[2],[2])