我正在寻找矢量化的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
答案 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);