Perl PDL - 在向量中获得80%的最低值

时间:2012-03-01 10:37:15

标签: perl percentile pdl

是否有优雅的PDL函数接收值列表并返回80%原始值最低的列表?

例如: 如果我有这样的清单:(9,4,1,2,7,8,3,5,6,10)

我想在原始列表上调用此函数后得到(1,2,3,4,5,6,7,8)(值的顺序无关紧要 - 它不需要排序值)。

我发现PDL :: Ufunc :: oddpct可以返回第80百分位,但我希望获得一个达到该百分位数的值列表。我可以自己做,但如果有开箱即用的东西 - 为什么不使用它呢?

谢谢!

3 个答案:

答案 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,但可能至少同样快:

Statistics::CaseResampling's select_kth function