matlab - 相对于另一个矩阵对一个矩阵的行进行排序

标签 matlab

我有两个不同的矩阵 AB:

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_BA 进行排序(即,在矩阵 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/

相关文章:

python - sympy 中的耗时替换

matlab - 在 Matlab 中查找顶点并绘制三角形

c - 如何从 GTK+2 C 代码调用 matlab/octave 函数

matlab - 从结构数组中删除元素

matlab - 查找相同值的系列

matlab - 如何在 MATLAB 中创建抽象类对象数组?

matlab - 矢量化在 Matlab 中不起作用 - 矩阵尺寸不一致?

matlab - MATLAB内部矩阵尺寸必须一致

excel - 如何使用 OpenOffice 通过 Matlab 写入 Excel 文件?

matlab - 使用MATLAB Engine时如何获取matlab的PID?