我有一个数组称为甲,它具有2排和56列(如所附的图像中示出)排序阵列并保持指数在MATLAB
的第一行表示值,而第二行表示每个值的索引。我想排序的第一行,但保持每个值的索引(我试图使用排序函数,但它不保留第二行中的每个值的索引)。 例如,让我们假设我有这样的矩阵
输入 X = [9 2 4 3 3 1 8 2]
我想要的输出如下所示 Y = [1 2 3 4 9; 1 2 8 3];
我有一个数组称为甲,它具有2排和56列(如所附的图像中示出)排序阵列并保持指数在MATLAB
的第一行表示值,而第二行表示每个值的索引。我想排序的第一行,但保持每个值的索引(我试图使用排序函数,但它不保留第二行中的每个值的索引)。 例如,让我们假设我有这样的矩阵
输入 X = [9 2 4 3 3 1 8 2]
我想要的输出如下所示 Y = [1 2 3 4 9; 1 2 8 3];
有一对夫妇的方式来实现这一目标:
[y1,I] = sort(x(1,:))
y2 = x(2,I)
y = [ y1 ; y2 ]
这基本上排序数据的第一行,并保存分类指数I
,然后用那些获得“排序”第二行的索引,然后只加入它们
或
y = sortrows(x')'
'
运算符转换矩阵,它允许您使用sortrows
,然后再次使用它来重新整形输出矩阵。
呵呵,从来不知道分拣!有趣的是,没有sortcols相当于... – ConfusinglyCuriousTheThird
sortrows产生错误的结果 – rahnema1
你是什么意思错误的结果?它给了我预期的输出 –
您可以使用排序元素
[S,I]=sort(x(1,:));
result = [S;x(2,I)]
的指数第一行排序,排序元素的索引来订购第二排。
结果
2 3 4 9
1 2 8 3
您可以直接从排序第一行获取索引。这些可以作为在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)]
您的解决方案是我的复制 – rahnema1
我已经接受你的答案队友:) –
可以使用'sortrows':'Y =调用sortRows(X ')'' – Adiel
@Adiel调用sortRows产生错误的结果。你可以测试这个'x = [1 1 1 2 2 3; 1 2 1 4 7 1]' – rahnema1
你的例子的输出有什么问题?你认为哪种方式“错误”?似乎OP不想保留一些原始顺序,或者他有任何重复顺序的重复值,特别是当它不能被定义为“错误”时,仅仅依赖于特定的情况。 – Adiel