我有一个名为 A 的数组,它有 2行和 56列(如附图所示)
第一行表示值,第二行表示每个值的索引。
我想对第一行进行排序,但保留每个值的索引(我尝试使用排序函数,但它不会保留第二行中每个值的索引)。 例如,假设我有这个矩阵
输入 x = [9 2 4 3; 3 1 8 2]
我希望输出看起来像这样 y = [2 3 4 9; 1 2 8 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)]