my $val = $my_pdl->index($i);
####
my $val = $my_pdl->at($i);
####
#!/usr/bin/env perl
use strict;
use warnings;
use PDL;
use Benchmark qw(:all);
cmpthese(
100,
{ 'pdl_values' => sub {&pdl_value},
'perl_values' => sub {&perl_scalar_value},
}
);
exit;
sub pdl_value {
my $pdl = ones( float, 10000 );
my $nelem = nelem($pdl);
for ( my $i = 0; $i < $nelem; ++$i ) {
my $val = $pdl->index($i);
#Do something
}
return;
}
sub perl_scalar_value {
my $pdl = ones( float, 10000 );
my $nelem = nelem($pdl);
for ( my $i = 0; $i < $nelem; ++$i ) {
my $val = $pdl->at($i);
#Do something
}
return;
}
####
Rate pdl_values perl_values
pdl_values 16.8/s -- -74%
perl_values 64.1/s 282% --
####
#!/usr/bin/env perl
use strict;
use warnings;
use PDL;
use Benchmark qw(:all);
cmpthese(
100,
{ 'pdl_values' => sub {&pdl_value},
'perl_values' => sub {&perl_scalar_value},
}
);
exit;
sub pdl_value {
my $pdl = ones( float, 10000 );
$pdl->index(0) .= 999;
my $nelem = nelem($pdl);
my $special_value = 999;
my @values;
for ( my $i = 0; $i < $nelem; ++$i ) {
my $val = $pdl->index($i);
if ( $val == $special_value ) {
$val = undef;
}
push @values, $val;
}
#Do something with @values
return;
}
sub perl_scalar_value {
my $pdl = ones( float, 10000 );
$pdl->index(0) .= 999;
my $nelem = nelem($pdl);
my $special_value = 999;
my @values;
for ( my $i = 0; $i < $nelem; ++$i ) {
my $val = $pdl->at($i);
if ( $val == $special_value ) {
$val = undef;
}
push @values, $val;
}
#Do something with @values
return;
}
####
Rate pdl_values perl_values
pdl_values 1.51/s -- -97%
perl_values 52.1/s 3347% --
####
pdl> $a = xvals(5)*2; # $a is a PDL
pdl> $a4 = $a->at(4); # $a4 is a perl scalar
####
pdl> @a = $a->list; pdl> for($a->list) { print $_, - ; }
0-2-4-6-8-