如何根据向量矩阵的顺序重新排序单元格数组列,同时在Matlab中保持行完整?

use*_*821 5 matlab matrix cell

我有一个108x8矩阵(称为矩阵),如下所示:

5   8   3   6   2   1   7   4
8   4   2   7   1   3   6   5
5   4   3   2   1   7   8   6
1   7   8   5   6   4   3   2
Run Code Online (Sandbox Code Playgroud)

我有另一个108x8单元阵列(称为数据),如下所示:

   'B'  'B' 'B' 'A' 'B' 'B' 'A' 'B'
   'A'  'B' 'B' 'A' 'B' 'A' 'A' 'A'
   'A'  'A' 'B' 'A' 'A' 'B' 'B' 'B'
   'A'  'A' 'A' 'B' 'A' 'A' 'A' 'A'
Run Code Online (Sandbox Code Playgroud)

我想重新排列矩阵,使每行保持不变并按升序排序.这可以通过[vals order] = sort(matrix,2)命令轻松完成.我想以相同的方式重新排列数据矩阵.

以前的解决方案建议使用如下命令:

reordered_data=data(order)
Run Code Online (Sandbox Code Playgroud)

但是,这不会产生预期的结果,它会重新排列数据,但不会按正确的顺序排列.

希望这很清楚,如果需要澄清,请告诉我.

谢谢.

Jun*_*uxx 0

你尝试过使用sortrows吗?

[vals, I] = sortrows(matrix);
for i = 1:size(matrix,1);
     reordered_data(i,:) = data(I(i),:);
end
Run Code Online (Sandbox Code Playgroud)

这是结果:

reordered_data = 

    'A'    'A'    'A'    'B'    'A'    'A'    'A'    'A'
    'A'    'A'    'B'    'A'    'A'    'B'    'B'    'B'
    'B'    'B'    'B'    'A'    'B'    'B'    'A'    'B'
    'A'    'B'    'B'    'A'    'B'    'A'    'A'    'A'
Run Code Online (Sandbox Code Playgroud)