sort an array and store them into subarrays

1 Ansicht (letzte 30 Tage)
Chong Tao
Chong Tao am 31 Mär. 2014
Bearbeitet: Azzi Abdelmalek am 1 Apr. 2014
Hi, I have a question regarding sorting arrary and store them into subset. How can I sort an array according to the second column value and store them into subarrays. and get the value of second column. So for an arrary like the following, I would know there are 3 groups(1,2,3) according column 2 and I would get 3 subsets. Thanks a lot.
if true
1 1 9999.69307 3.374E-28
1 1 9999.72441 4.662E-27
1 2 9999.73112 2.083E-29
1 2 9999.93918 4.851E-29
1 1 9999.95707 1.353E-26
1 3 9999.69307 3.374E-28
1 1 9999.72441 4.662E-27
1 2 9999.74112 2.083E-29
1 3 9999.98918 4.851E-29
1 1 9999.99707 1.353E-26 end

Akzeptierte Antwort

Azzi Abdelmalek
Azzi Abdelmalek am 31 Mär. 2014
Bearbeitet: Azzi Abdelmalek am 1 Apr. 2014
A = [ 1 1 9999.69307 3.374E-28
1 1 9999.72441 4.662E-27
1 9 9999.73112 2.083E-29
1 9 9999.93918 4.851E-29
1 1 9999.95707 1.353E-26
1 3 9999.69307 3.374E-28
1 5 9999.72441 4.662E-27
1 2 9999.74112 2.083E-29
1 3 9999.98918 4.851E-29
1 3 9999.99707 1.353E-26];
B=sortrows(A,2); % Sort A according to second column;
out=accumarray(A(:,2),(1:size(A,1))',[],@(x){A(x,:)})
out(cellfun(@isempty,out))=[]

Weitere Antworten (2)

Chong Tao
Chong Tao am 31 Mär. 2014
Bearbeitet: Chong Tao am 31 Mär. 2014
Thank you very much Azzi and Per isakson! I need to clarify my question. I'm trying to load a pretty big array from file(3000X10 array) and sort the array. the second column may not be consective numbers as in previous sample. It can be any number from 1 to 11 and can't be predicted unless the data was loaded. say for example,
if true
A = [ 1 1 9999.69307 3.374E-28
1 1 9999.72441 4.662E-27
1 9 9999.73112 2.083E-29
1 9 9999.93918 4.851E-29
1 1 9999.95707 1.353E-26
1 3 9999.69307 3.374E-28
1 5 9999.72441 4.662E-27
1 2 9999.74112 2.083E-29
1 3 9999.98918 4.851E-29
1 3 9999.99707 1.353E-26];
end
  1 Kommentar
Chong Tao
Chong Tao am 31 Mär. 2014
Bearbeitet: Chong Tao am 31 Mär. 2014
all these are double precision numbers. is that what you ask?

Melden Sie sich an, um zu kommentieren.


Jos (10584)
Jos (10584) am 1 Apr. 2014
Shorter, with less overhead and more flexible:
[~,~,j] = unique(A(:,2))
C = accumarray(j,1:numel(j),[max(j) 1],@(k) {A(k,:)})

Kategorien

Mehr zu Shifting and Sorting Matrices finden Sie in Help Center und File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by