2012-03-01 63 views
4

是否有一個優雅的PDL函數可以接收值列表並返回最低值的80%的原始值列表?Perl PDL - 獲取向量中80%的最低值

例如: 如果我有像的列表,以便:(9,4,1,2,7,8,3,5,6,10)

我想獲得(1,2 ,3,4,5,6,7,8)在原始列表上調用此函數後(值的順序無關緊要 - 它不需要對值進行排序)。

我發現PDL :: Ufunc :: oddpct可以返回第80百分位數,但我想得到一個高達百分位數值的列表。我可以自己做,但如果有什麼開箱即可 - 爲什麼不使用它?

謝謝!

回答

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] 
+0

酷!非常好!!!謝謝! – 2012-03-01 15:40:42

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";