对数组进行排序并将索引保​​留在MATLAB中

时间:2017-03-01 07:53:25

标签: matlab sorting

我有一个名为 A 的数组,它有 2行 56列(如附图所示)

array

第一行表示值,第二行表示每个值的索引。

我想对第一行进行排序,但保留每个值的索引(我尝试使用排序函数,但它不会保留第二行中每个值的索引)。 例如,假设我有这个矩阵

输入 x = [9 2 4 3; 3 1 8 2]

我希望输出看起来像这样 y = [2 3 4 9; 1 2 8 3];

3 个答案:

答案 0 :(得分:1)

您可以使用已排序元素的索引

[S,I]=sort(x(1,:));
result = [S;x(2,I)]

对第一行进行排序,并使用已排序元素的索引对第二行进行排序。

结果

2   3   4   9
1   2   8   3

答案 1 :(得分:1)

有几种方法可以实现这一目标:

[y1,I] = sort(x(1,:))

y2 = x(2,I)

y = [ y1 ; y2 ]

这基本上对数据的第一行进行排序,并将排序索引保存在I中,然后使用这些索引获取“排序”的第二行,然后加入它们

y = sortrows(x')'

'运算符转置矩阵,允许您使用sortrows,然后再次使用它来重塑输出矩阵。

答案 2 :(得分:0)

您可以直接从排序第一行获取索引。这些可以用作x本身的参数:

x=[9 2 4 3 ;3 1 8 2 ];

%get the indices of the first row:
[~,indices] = sort(x(1,:))

%return x in the order "indices" for each row: 
y = [x(1,indices);x(2,indices)]