特定的多重比较

时间:2016-02-02 11:06:42

标签: matlab multiset

我正在寻找矢量化的matlab函数来解决以下问题:

我已对multiset T = [1 1 1 1 2 2 2 3]

进行了排序

并排序V T的{​​{1}}(length(V)总是小于length(T)

V = [ 1 1 1 2]

我需要找到逻辑向量

D = [1 1 1 0 1 0 0 0]

其中length(D) = length(T)T(D) = V

1 个答案:

答案 0 :(得分:2)

为了获得良好的性能,我的想法是使用直方图,因此数据量更小:

T = [1 1 1 1 2 2 2 3];
V = [ 1 1 1 2];
%Get list of all symbols
E=unique(T);
hT=hist(T,E);
hV=hist(V,E);
rep=[hV;hT-hV];
%Next two lines are taken from this answer http://stackoverflow.com/a/28615814/2732801
R=mod(cumsum(accumarray(cumsum([1; rep(:)]), 1)),2);
R=R(1:end-1);

可以使用matlab函数repelem代替最后两行:

R=mod(repelem(1:numel(rep),rep(:)),2);