如何快速获得多重数组

Lep*_*ist 7 arrays matlab unique accumarray

什么是服用的阵列的最快方式A和outputing二者unique(A)[即所述一组唯一的数组元素A]以及多重阵列这需要在其第i个位置的第i个条目的第i个多重性unique(A)A.

这是一个满口,所以这是一个例子.鉴于A=[1 1 3 1 4 5 3],我想:

  1. unique(A)=[1 3 4 5]
  2. mult = [3 2 1 1]

这可以通过繁琐的for循环来完成,但是想知道是否有办法利用MATLAB的数组特性.

Lui*_*ndo 7

uA = unique(A);
mult = histc(A,uA);
Run Code Online (Sandbox Code Playgroud)

或者:

uA = unique(A);
mult = sum(bsxfun(@eq, uA(:).', A(:)));
Run Code Online (Sandbox Code Playgroud)

标杆

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
Run Code Online (Sandbox Code Playgroud)

结果N = 100:

Elapsed time is 0.096206 seconds.
Elapsed time is 0.235686 seconds.
Elapsed time is 0.154150 seconds.
Run Code Online (Sandbox Code Playgroud)

结果N = 1000:

Elapsed time is 0.481456 seconds.
Elapsed time is 4.534572 seconds.
Elapsed time is 0.550606 seconds.
Run Code Online (Sandbox Code Playgroud)