www.gusucode.com > matlab 案例源码 matlab代码程序 > matlab/UsingFunctionsThatDependonDataOrderExample.m

    %% Using Functions That Depend on Data Order  

%% 
% Create a vector of data, |val|, and a matrix of subscripts, |subs|. 
val = 1:5;
subs = [1 2; 1 1; 1 2; 1 1; 2 3] 

%%
% The subscripts in |subs| define a 2-by-3 matrix for the output, but are
% unsorted with respect to the linear indices in the output, |A|.  

%% 
% Group the values in |val| into a cell array by specifying |fun = @(x) {x}|. 
A = accumarray(subs,val,[],@(x) {x}) 

%%
% The result is a 2-by-3 cell array.  

%% 
% Examine the vector in |A{1,2}|. 
A{1,2} 

%%
% The elements of the |A{1,2}| vector are in a different order than in |val|.
% The first element of the vector is 3 instead of 1. If the subscripts in
% |subs| are not sorted with respect to their linear indices, then |accumarray|
% might not always preserve the order of the data in |val| when it passes
% them to |fun|. In the unusual case that |fun| requires that its input
% values be in the same order as they appear in |val|, sort the indices
% in |subs| with respect to the linear indices of the output.  

%% 
% In this case, use the |sortrows| function with two inputs and two outputs
% to reorder |subs| and |val| concurrently with respect to the linear indices
% of the output. 
[S,I] = sortrows(subs,[2,1]);
A = accumarray(S,val(I),[],@(x) {x});
A{1,2} 

%%
% The elements of the |A{1,2}| vector are now in sorted order.