是否有优雅的PDL函数接收值列表并返回80%原始值最低的列表?
例如: 如果我有这样的清单:(9,4,1,2,7,8,3,5,6,10)
我想在原始列表上调用此函数后得到(1,2,3,4,5,6,7,8)(值的顺序无关紧要 - 它不需要排序值)。
我发现PDL :: Ufunc :: oddpct可以返回第80百分位,但我希望获得一个达到该百分位数的值列表。我可以自己做,但如果有开箱即用的东西 - 为什么不使用它呢?
谢谢!
答案 0 :(得分:5)
我建议您使用pct
获取第80百分位数字,并结合where
原语选择该值下的所有内容。使用您自己的数据,它看起来像这样
use strict;
use warnings;
use PDL;
my $list = pdl(9, 4, 1, 2, 7, 8, 3, 5, 6, 10);
print qsort $list->where($list <= $list->pct(80/100));
<强>输出强>
[1 2 3 4 5 6 7 8]
答案 1 :(得分:0)
嗯,这是你不想做的“自己动手”,但它很容易。 PDL似乎可能很重要。
use strict;
use warnings;
my @list = (9, 4, 1, 2, 7, 8, 3, 5, 6, 10);
my @slist = sort {$a <=> $b} @list;
my @list80 = @slist[0..int(0.8*@slist)-1];
print "@list80";
答案 2 :(得分:0)
不是PDL,但可能至少同样快: