我有一个向量dG=rand(m,1);
和一个数组lambda=rand(m,8);
我按降序对dG
进行排序,然后根据新排序的dG
对lambda进行"逐行"排序。原因是我想要基于新排序的向量dG
的顶部5%
的lambda值的5%
。
但是当m
非常大时,这个过程非常耗时。有没有更有效的方法?
例如:
m=1E10;
dG=rand(m,1);
lambda=rand(m,8);
[~, Gsort]=sort(dG);
lambdaSorted=lambda(Gsort,:);
您可以使用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, :);