Matlab:对数组进行排序以另一个矢量

时间:2018-11-15 13:35:32

标签: matlab

我有一个向量dG=rand(m,1);和一个数组lambda=rand(m,8);

我按降序对dG进行排序,然后基于新排序的dG对lambda进行“行”排序。这样做的原因是,我希望基于新排序向量5%的顶部5%中的dG来自lambda的值。

但是当m很大时,此过程非常耗时。有没有更有效的方法?

例如:

m=1E10;

dG=rand(m,1); 
lambda=rand(m,8);

[~, Gsort]=sort(dG);
lambdaSorted=lambda(Gsort,:);

1 个答案:

答案 0 :(得分:4)

您可以使用maxk代替排序来提取前5%的值:

[~, Gsort] = maxk(dG, 0.05 * m);
lambdaSorted = lambda(Gsort, :);

如果拥有“统计和机器学习”工具箱,则可以使用prctile提取元素的95nd个百分位数。选项'approximate'不使用排序来近似百分位数,并且适合大数据。

p = prctile(dG, 95,'Method','approximate');
lambdaSorted = lambda(dG > p, :);

如果要随机排列数组,可以使用randperm

idx = randperm(m, 0.05 * m);
lambdaSorted = lambda(idx, :);