我刚从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')
我该怎么做?某个模块中是否有内置函数可以启用此操作?
答案 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])