Matlab 使用自定义函数重新排列/排序矩阵

Matlab 使用自定义函数重新排列/排序矩阵,matlab,octave,Matlab,Octave,如何使用自定义函数对矩阵进行排序/重新排列 也就是说,如果我有这样的数据: 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.64

如何使用自定义函数对矩阵进行排序/重新排列

也就是说,如果我有这样的数据:

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

对于大型矩阵,这是非常慢的:(

使用第二次输出的
排序来获取列索引:

[~, ind] = sort(data(end,:)./data(1,:))
result = data(:,ind);

这很慢,因为它需要为更大的矩阵分配内存。你可以在没有连接的情况下做几乎相同的事情;看到我的答案了吗