从Perl中的数组中概率样本

时间:2014-12-18 20:53:31

标签: r algorithm perl probability

我在Perl中有一个数组,我想以概率的方式从中抽取样本。例如,在R中,函数sample为我做了,例如

x = c('a','b','c','d')
sample(x,size = 2,prob = c(0.1,0.4,0.4,0.1))

以上代码会更频繁地返回b,c。我如何在Perl中做同样的事情。有没有一个模块可以帮我吗? 提前谢谢。

2 个答案:

答案 0 :(得分:1)

这可以使用vsearch函数在PDL(按比例)完成。

use strict;
use warnings;

use PDL;

my @x = qw( a b c d );

my $pdf = pdl( 0.1, 0.4, 0.4, 0.1 );

# vsearch requires a CDF,
my $cdf = $pdf->dcumusumover;
$cdf /= $cdf->max;

# $sample is a piddle containing the indices into @x;
my $sample = vsearch( random(10000), $cdf );

print scalar hist( $sample, 0, 4, 1 ), "\n";

结果

% perl x.pl
[991 3974 4014 1021]

答案 1 :(得分:0)

使用基本的perl命令,您可以执行类似

的操作
my @vals = ('a','b','c','d');
my @probs = (0.1,0.4,0.4,0.1);
my @result;
for(my $i=0; $i<20; $i++) {
    my $draw = rand(1);
    my $v = 0;
    while ($draw>0 && $draw > $probs[$v]){
        $draw -= $probs[$v];
        $v++;
    }
    push @result, $vals[$v];
}

print join(", ", @result), "\n";