4

値のリストを受け取り、最も低い元の値の 80% のリストを返すエレガントな PDL 関数はありますか?

例: 次のようなリストがある場合: (9, 4, 1, 2, 7, 8, 3, 5, 6, 10)

元のリストでこの関数を呼び出した後、(1, 2, 3, 4, 5, 6, 7, 8) を取得したいと思います (値の順序は重要ではありません - 値をソートする必要はありません)。

80 パーセンタイルを返すことができる PDL::Ufunc::oddpct を見つけましたが、そのパーセンタイルまでの値のリストを取得したいと考えています。私はそれを自分で行うことができますが、箱から出してすぐに使えるものがある場合は、それを使用してみませんか?

ありがとう!!!

4

3 に答える 3

5

を使用して 80 パーセンタイルの数値を取得し、プリミティブとpct組み合わせて、その値より下のすべてを選択することをお勧めします。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]
于 2012-03-01T12:37:13.007 に答える
0

PDL ではありませんが、おそらく少なくとも同じくらい高速です。

Statistics::CaseResampling の select_kth 関数

于 2012-03-04T17:01:29.890 に答える
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";
于 2012-03-01T14:42:14.303 に答える