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-