我有一个 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)
但是,这并没有给出预期的结果,它确实重新排列了数据,但顺序不正确。
希望这是清楚的,如果需要澄清,请告诉我。
谢谢。
最佳答案
您可以将 order
索引转换为矩阵索引,因此您不需要循环。
[vals, order] = sort(matrix,2);
[r,c] = size(matrix);
index = bsxfun( @plus, order, (0:r-1)'*c );
data = data';
reordered_data = data(index')';
关于matlab - 如何根据向量矩阵的顺序对单元格数组列重新排序,同时在 Matlab 中保持行的完整性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15886292/