我有两个不同的矩阵 A
和 B
:
A =
[7 8 9;
4 5 6]
B =
[22 32 12;
9 8 10]
sortB =
[12 22 32;
8 9 10]
sortindex_B=[3 1 2;2 1 3];
,即12在矩阵B
的第三个位置,22在第一,32在第二位置;第二行也是如此。
现在我想根据 Sortindex_B
对 A
进行排序(即,在矩阵 A
中,我希望 7 作为第三个元素,8 作为第一行,9 作为第一行的第二个元素;第二行也类似:第二行 4,第一行 5,第三行 6)。因此结果应该是这样的:
A_final =
[8 9 7;
5 4 6]
我怎样才能做到这一点?
最佳答案
在对B
进行排序时,可以通过sort
命令获取排序索引矩阵,然后将A
作为一个单元格进行操作,在所以让 cellfun
可用:
A = [7 8 9; 4 5 6];
B = [22 32 12; 9 8 10];
[sortB, I] = sort(B,2);
Icell = mat2cell(I,ones(1, size(I,1)),size(I,2));
Acell = mat2cell(A,ones(1, size(I,1)),size(I,2));
sortA = cell2mat(...
cellfun(@(x,y) y(x), Icell, Acell, 'UniformOutput', false))
输出(您将第一行输出声明为 8 9 7
,但您真的是说 9 7 8
吗?)
sortA =
9 7 8
5 4 6
用于按照您的问题具体指定的排序;重新映射索引矩阵 I
:
A = [7 8 9; 4 5 6];
B = [22 32 12; 9 8 10];
[sortB, I] = sort(B,2);
%// re-map I
for i = 1:size(I,1)
Itmp = I(i,:);
for j = 1:size(I,2)
I(i,Itmp(j)) = j;
end
end
Icell = mat2cell(I,ones(1, size(I,1)),size(I,2));
ImapCell = mat2cell(Imap,ones(1, size(I,1)),size(I,2));
Acell = mat2cell(A,ones(1, size(I,1)),size(I,2));
sortA = cell2mat(...
cellfun(@(x,y) y(x), Icell, Acell, 'UniformOutput', false))
输出
sortA =
8 9 7
5 4 6
关于matlab - 相对于另一个矩阵对一个矩阵的行进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35632094/