sort an array and store them into subarrays

1 visualización (últimos 30 días)
Chong Tao
Chong Tao el 31 de Mzo. de 2014
Editada: Azzi Abdelmalek el 1 de Abr. de 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

Respuesta aceptada

Azzi Abdelmalek
Azzi Abdelmalek el 31 de Mzo. de 2014
Editada: Azzi Abdelmalek el 1 de Abr. de 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))=[]

Más respuestas (2)

Chong Tao
Chong Tao el 31 de Mzo. de 2014
Editada: Chong Tao el 31 de Mzo. de 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 comentario
Chong Tao
Chong Tao el 31 de Mzo. de 2014
Editada: Chong Tao el 31 de Mzo. de 2014
all these are double precision numbers. is that what you ask?

Iniciar sesión para comentar.


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

Categorías

Más información sobre Shifting and Sorting Matrices en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by