Matlab:用另一个向量对数组进行排序



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

相关内容

  • 没有找到相关文章

最新更新