uA = unique(A); mult = histc(A,uA);
As an alternative:
uA = unique(A); mult = sum(bsxfun(@eq, uA(:).', A(:)));
Benchmarking
N = 100; A = randi(N,1,2*N); %// size 1 x 2*N %// Luis Mendo, first approach tic for iter = 1:1e3; uA = unique(A); mult = histc(A,uA); end toc %// Luis Mendo, second approach tic for iter = 1:1e3; uA = unique(A); mult = sum(bsxfun(@eq, uA(:).', A(:))); end toc %'// chappjc tic for iter = 1:1e3; [uA,~,ic] = unique(A); % uA(ic) == A mult= accumarray(ic.',1); end toc
Results with N = 100 :
Elapsed time is 0.096206 seconds. Elapsed time is 0.235686 seconds. Elapsed time is 0.154150 seconds.
Results with N = 1000 :
Elapsed time is 0.481456 seconds. Elapsed time is 4.534572 seconds. Elapsed time is 0.550606 seconds.
Luis mendo
source share