如何使用自定义函数对矩阵进行排序/重新排列?
即。如果我有这样的数据:
data = rand(5)
data =
0.9705954 0.9280535 0.1763516 0.0024225 0.8622087
0.4187847 0.3452783 0.7068682 0.9295234 0.0906835
0.3371114 0.4808020 0.8806709 0.9573226 0.5422291
0.6477601 0.5711606 0.1111401 0.3909264 0.3565683
0.0086004 0.8695550 0.7431095 0.8492812 0.6675760
我想按最后一行的值除以第一行的值来排序/重新排列矩阵列。我无法弄清楚如何以一种很好的方式做到这一点。到目前为止,我发现的唯一方法是这个丑陋的黑客:
tmp = [data(end,:) ./ data(1,:); data]
tmp =
8.8610e-03 9.3697e-01 4.2138e+00 3.5059e+02 7.7426e-01
9.7060e-01 9.2805e-01 1.7635e-01 2.4225e-03 8.6221e-01
4.1878e-01 3.4528e-01 7.0687e-01 9.2952e-01 9.0683e-02
3.3711e-01 4.8080e-01 8.8067e-01 9.5732e-01 5.4223e-01
6.4776e-01 5.7116e-01 1.1114e-01 3.9093e-01 3.5657e-01
8.6004e-03 8.6955e-01 7.4311e-01 8.4928e-01 6.6758e-01
tmp = sortrows(tmp')'
tmp =
8.8610e-03 7.7426e-01 9.3697e-01 4.2138e+00 3.5059e+02
9.7060e-01 8.6221e-01 9.2805e-01 1.7635e-01 2.4225e-03
4.1878e-01 9.0683e-02 3.4528e-01 7.0687e-01 9.2952e-01
3.3711e-01 5.4223e-01 4.8080e-01 8.8067e-01 9.5732e-01
6.4776e-01 3.5657e-01 5.7116e-01 1.1114e-01 3.9093e-01
8.6004e-03 6.6758e-01 8.6955e-01 7.4311e-01 8.4928e-01
data = tmp(2:end,:)
data =
0.9705954 0.8622087 0.9280535 0.1763516 0.0024225
0.4187847 0.0906835 0.3452783 0.7068682 0.9295234
0.3371114 0.5422291 0.4808020 0.8806709 0.9573226
0.6477601 0.3565683 0.5711606 0.1111401 0.3909264
0.0086004 0.6675760 0.8695550 0.7431095 0.8492812
对于大型矩阵,这很慢:(
答案 0 :(得分:2)
使用sort
的第二个输出来获取列索引:
[~, ind] = sort(data(end,:)./data(1,:))
result = data(:,ind);