我有一个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)
但是,这不会产生预期的结果,它会重新排列数据,但不能按正确的顺序排列。
希望这很清楚,如果需要澄清,请告诉我。
谢谢。
答案 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'