我有一个向量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,:);
答案 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, :);