2012-03-01 9 views
4

値のリストを受け取って、最も低い元の値の80%のリストを返すエレガントなPDL関数はありますか?私はそうのようなリストがある場合 :(9、4、1、2、7、8、3、5、6、10)Perl PDL - ベクトルの最小値を80%にする

をI(1を取得したいと思い、2例えば

、3、4、5、6、7、8)を使用します(値の順序は重要ではありません。値をソートする必要はありません)。

私は80番目のパーセンタイルを返すことができるPDL :: Ufunc :: oddpctを見つけましたが、そのパーセンタイルまでの値のリストを取得したいと思います。私は自分でそれをすることができますが、箱から何かがあれば、それを使用しないでください。

ありがとうございました!

答えて

5

whereプリミティブと組み合わせて、80番目のパーセンタイル値を得るには、pctを使用することをお勧めします。独自のデータを使用すると、それはこの

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

OUTPUT

[1 2 3 4 5 6 7 8] 
+0

クール!非常に素晴らしい!!!ありがとう! –

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"; 
関連する問題