5

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

但是,这并没有给出预期的结果,它确实重新排列了数据,但顺序不正确。

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

谢谢你。

4

2 回答 2

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')';
于 2013-04-08T19:01:39.983 回答
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'
于 2013-04-08T18:34:38.123 回答