use strict;
use warnings;
use feature 'say';
use PDL;
my $n = 100; # input sample size
my $m = 1000; # number of bootstrap repeats
my $r = $n; # re-sample size
my $x = random $n;
my $idx = random $r, $m;
$idx *= $n;
say $x-> index( $idx )
-> avgover
-> pctover( pdl 0.05, 0.95 );
__END__
[ 0.4608755 0.55562806]
####
use strict;
use warnings;
use feature 'say';
use Time::HiRes 'time';
use PDL;
srand( 123 );
my $time = time;
my $n = 30000; # input sample size
my $m = 10000; # number of bootstrap repeats
my $r = $n; # re-sample size
my $x = random $n;
my $avg = zeroes $m;
for ( 0 .. $m - 1 ) {
my $idx = random $r;
$idx *= $n;
$avg-> set( $_, $x-> index( $idx )-> avg )
}
say $avg-> pctover( pdl 0.05, 0.95 );
say time - $time;
__END__
[0.49384165 0.49941814]
6.11959099769592
##
##
use strict;
use warnings;
use feature 'say';
use Time::HiRes 'time';
use PDL;
use PDL::Parallel::threads qw/ share_pdls retrieve_pdls /;
srand( 123 );
my $time = time;
my $n = 30000; # input sample size
my $m = 10000; # number of bootstrap repeats
my $r = $n; # re-sample size
my $x = random $n;
my $avg = zeroes $m;
share_pdls x => $x, avg => $avg;
threads-> create( sub {
my ( $x, $avg ) = retrieve_pdls qw/ x avg /;
for ( 0 .. $m - 1 ) {
my $idx = random $r;
$idx *= $n;
$avg-> set( $_, $x-> index( $idx )-> avg )
}
});
$_-> join for threads-> list;
say $avg-> pctover( pdl 0.05, 0.95 );
say time - $time;
__END__
[0.49384165 0.49941814]
4.57857203483582
##
##
use PDL::Parallel::threads qw/ share_pdls retrieve_pdls /;
share_pdls x => $x, avg => $avg;
( $x, $avg ) = retrieve_pdls qw/ x avg /;
##
##
$ perl -v
This is perl 5, version 26, subversion 1 (v5.26.1) built for x86_64-linux-thread-multi
(with 1 registered patch, see perl -V for more detail)
$ perl -MPDL -E 'say $PDL::VERSION'
2.019