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

时间:2013-04-08 18:28:12

标签: 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

我有另一个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'

我想重新排列矩阵,使每行保持完整并按升序排序。使用[vals order] = sort(matrix,2)命令可以轻松完成此操作。我想以相同的方式重新排列数据矩阵。

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

reordered_data=data(order)

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

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

谢谢。

2 个答案:

答案 0 :(得分:1)

您可以将order索引转换为矩阵索引,因此您不需要循环。

[vals, order] = sort(matrix,2);
[r,c] = size(matrix);
index = bsxfun( @plus, order, (0:r-1)'*c );
data = data';
reordered_data = data(index')';

答案 1 :(得分:0)

您是否尝试过使用sortrows

[vals, I] = sortrows(matrix);
for i = 1:size(matrix,1);
     reordered_data(i,:) = data(I(i),:);
end

结果如下:

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'