如何在MATLAB中按照第二行对2-D数组进行排序?

3

I have array say "a"

a =

 1     4     5
 6     7     2

如果我使用函数 b=sort(a),它会给出以下结果:b =
 1     4     2
 6     7     5

但我想要的答案是:

b =

 5     1     4
 2     6     7

意思是第二行应该排序,但第一行的元素应保持不变,并且应与第二行对应。

3个回答

3

sortrows(a',2)'

Pulling this apart:

a =  1     4     5
     6     7     2

a' = 1 6
     4 7
     5 2

sortrows(a',2) = 5 2
                 1 6
                 4 7

sortrows(a',2)' = 5 1 4
                  2 6 7

这里的关键是sortrows按指定行排序,其他行将遵循其顺序。

0

您可以只在第二行上使用SORT函数,然后使用索引输出来对整个数组进行排序:

[junk,sortIndex] = sort(a(2,:));
b = a(:,sortIndex);

1
垃圾可以被以下内容替换:[~, sortIndex]。在较新版本的MATLAB中,这样会更加简洁。 - MatlabDoug
1
不幸的是,它非常不向后兼容,当你为使用稍旧版本的Matlab的用户编写代码时,可能会非常尴尬。 - Jonas

0

怎么样?

a = [1 4 5; 6 7 2]
a =
     1     4     5
     6     7     2
>> [s,idx] = sort(a(2,:))
s =
     2     6     7
idx =
     3     1     2
>> b = a(:,idx)
b =
     5     1     4
     2     6     7

换句话说,您可以使用sort的第二个参数来获取所需的排序顺序,然后将其应用于整个内容。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接