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.