Question about sorting an array column by column

4 ビュー (過去 30 日間)
helen orins
helen orins 2021 年 9 月 27 日
コメント済み: helen orins 2021 年 9 月 27 日
I need to sort each column of a 1073x15 array for a heatmap in MATLAB.
[~,sortdices] = sort(choose_data(:,1),'ascend');
%choose_data = choose_data(:,sortdices);
for i=1:15
choose_data(:,i) = choose_data(sortdices,i)
end
this is my code. choose_data is the 1073x15 array. My output ends up being the first column sorted in ascending order, but the rest not. How do I fix it, such that all columns are sorted in ascending order? (Thank you for any help!)
  2 件のコメント
Walter Roberson
Walter Roberson 2021 年 9 月 27 日
Is each column to be sorted independently, or should the columns be sorted "within" each previous column? That is, if two rows have the same value for column 1, then look at column 2 to determine the order; if those are equal, look at column 3, and so on ? If so then sortrows()
helen orins
helen orins 2021 年 9 月 27 日
Each column is sorted independently. So column 1, in ascending order. Done. Next, column 2, and so on. Hence the loop. So that's why I created the function. The rows are untouched.

サインインしてコメントする。

回答 (2 件)

the cyclist
the cyclist 2021 年 9 月 27 日
編集済み: the cyclist 2021 年 9 月 27 日
choose_data = sort(choose_data)
will sort every column independently. Ascending sorting is the default, so you don't need to specify that. (But it also doesn't hurt, and might make the code clearer.)
  2 件のコメント
helen orins
helen orins 2021 年 9 月 27 日
I tried that, but this is the error I got: Unable to perform assignment because the size of the left side is 1073-by-1 and the size of the right side is 16095-by-1.
the cyclist
the cyclist 2021 年 9 月 27 日
編集済み: the cyclist 2021 年 9 月 27 日
Strange. Here is an example that illustrates that the syntax works:
M = magic(3)
M = 3×3
8 1 6 3 5 7 4 9 2
M = sort(M)
M = 3×3
3 1 2 4 5 6 8 9 7
Note that you do not need to do anything in a for loop. That one line of code will sort all columns of the array. You also don't need to do any indexing into the array.

サインインしてコメントする。


Steven Lord
Steven Lord 2021 年 9 月 27 日
Specify the dim input argument to the sort function.
A = magic(5)
A = 5×5
17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9
B = sort(A, 1)
B = 5×5
4 5 1 2 3 10 6 7 8 9 11 12 13 14 15 17 18 19 20 16 23 24 25 21 22
% Compare with
C = sort(A, 2)
C = 5×5
1 8 15 17 24 5 7 14 16 23 4 6 13 20 22 3 10 12 19 21 2 9 11 18 25
If you want to sort one of the columns and have the rest of the rows rearrange correspondingly see the sortrows function.
D = sortrows(A, 2) % sort by column 2
D = 5×5
23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9 17 24 1 8 15

カテゴリ

Help Center および File ExchangeData Distribution Plots についてさらに検索

製品

Community Treasure Hunt

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

Start Hunting!

Translated by