Sort columns by maximum value?

Having trouble with this one, how do I sort columns by the maximum value contained within them (must be a single line command)?
For example I have the following matrix:
5 -2 3
-10 6 2
0 0 1
The correct output should be:
3 5 -2
2 -10 6
1 0 0
I have narrowed it down to involving the max(x) command which returns the list of maximal values for each column as such:
5 6 3
But how can I then number these values in ascending order without first sorting them? e.g:
2 3 1
If I could do that then it would be simple to reorder from there. Again this problem seems easy using temporary variables but I have to do it as a single line. Any help appreciated.

回答 (4 件)

Azzi Abdelmalek
Azzi Abdelmalek 2013 年 12 月 18 日
編集済み: Azzi Abdelmalek 2013 年 12 月 18 日

1 投票

We can make it simple
y=x(:,sortrows([max(x);1:size(x,2)]',1)*[0;1])
Sean de Wolski
Sean de Wolski 2013 年 12 月 17 日
編集済み: Sean de Wolski 2013 年 12 月 17 日

0 投票

x = [5 -2 3
-10 6 2
0 0 1]
[~,idx] = sort(max(x));
y = x(:,idx)

1 件のコメント

Sean de Wolski
Sean de Wolski 2013 年 12 月 17 日
編集済み: Sean de Wolski 2013 年 12 月 17 日
Personally, I would never recommend doing this operation in a single line because it will just obfuscate it. If you really need to, there's probably a way using arrayfun but it'll look hideous and be unreadable.
Or you could just stack them together :)
[~,idx] = sort(max(x));y = x(:,idx)

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

Azzi Abdelmalek
Azzi Abdelmalek 2013 年 12 月 17 日

0 投票

x=[5 -2 3
-10 6 2
0 0 1];
y=x(:,setdiff(accumarray(max(x)',(1:size(x,2))'),0,'stable'))

1 件のコメント

Andrei Bobrov
Andrei Bobrov 2013 年 12 月 18 日
y=x(:,nonzeros(accumarray(max(x)',(1:size(x,2))')));

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

Andrei Bobrov
Andrei Bobrov 2013 年 12 月 18 日

0 投票

with subsref
y = x(:,subsref(sortrows([max(x)',(1:size(x,2))'],1),struct('type','()','subs',{{':',2}})))

カテゴリ

ヘルプ センター および File ExchangeShifting and Sorting Matrices についてさらに検索

質問済み:

2013 年 12 月 17 日

コメント済み:

2013 年 12 月 19 日

Community Treasure Hunt

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

Start Hunting!

Translated by