How to reorder the rows by sorting the elements of column in ascending order?
4 ビュー (過去 30 日間)
古いコメントを表示
Hi everyone,
I have id=[ 1 3 2; 2 6 4; 3 2 6; 4 5 1; 5 1 3; 6 4 5; 7 7 7]
j=1:3
I want to reorder the rows of id by sorting the jth column of id such that the elements in this column are sorted from small to large.
Where my result will get j set of number.
id1=[ 1 3 2; 2 6 4; 3 2 6; 4 5 1; 5 1 3; 6 4 5; 7 7 7]
id2=[5 1 3; 3 2 6; 1 3 2; 6 4 5; 4 5 1; 2 6 4; 7 7 7]
id3=[4 5 1; 1 3 2; 5 1 3; 2 6 4; 6 4 5; 3 2 6; 7 7 7 ]
How can i do this?
Thanks.
0 件のコメント
採用された回答
dpb
2014 年 5 月 13 日
編集済み: dpb
2014 年 5 月 13 日
for c=1:3
is(1)={sortrows(id,i)};
end
using a cell array to hold results; use a dynamic named structure field if desired
Alternatively, arrayfun is your friend for such things...
idsrted=arrayfun(@(c) sortrows(id,c),[1:3],'uniform',0);
4 件のコメント
dpb
2014 年 6 月 2 日
for c=1:3
new_id=sortrows(id,c);
...if use this as an example, the output will give me three different new_id...
NO! It'll give you only one new_id; the last one. Each subsequent pass thru the loop overwrites the previous as you didn't increment a cell array or concatenate the results to the existing in a single larger array.
Again, it's not clear just what you're after--if doesn't matter how large the array is as to the logic; the question remains on whether you must have the results all at once or can do the process on each subset at a time. We can't answer that; that depends on the results required. The thing I wonder about is why do sortrows individually if the latter; why not concatenate the full dataset then sort only once at the end? Bound to be more efficient.
その他の回答 (1 件)
Andrei Bobrov
2014 年 5 月 13 日
[~,ii] = sort(id);
id_out = bsxfun(@(a,b)a(b,:),id,permute(ii,[1 3 2]));
0 件のコメント
参考
カテゴリ
Help Center および File Exchange で Shifting and Sorting Matrices についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!