How to iterate through a Perl PDL piddle?

1.8k views Asked by At

The closest I got to was something like

use PDL;
my $u = pdl [1,2,3,4];
my $dim = 4;
for(my $i=0; $i<$dim; $i++)
{
  print $u->flat->index($i), "\n";
}

Also as I can convert [1,2,3,4] to piddle $u, can I get back a list (or a list of lists for a matrix) from $u?

2

There are 2 answers

1
arrac On BEST ANSWER

With the wisdom from the monks, I found the answer: http://perlmonks.org/index.pl?node_id=892201

Thought I'd share it here in my original question. The above code can be rewritten as:

use PDL;
my $u = pdl [1,2,3,4];
foreach ($u->dog)
{
  print $_, "\n";
}

The wisdom came with a disclaimer that dog() works only on small piddles (object).

1
Demian On

besides using dog, here are two other options for your 1d pdl using index and list. there is also index2d

use PDL;
my $a = pdl(1 .. 4);
#use index
print $a->index($_), "\n" foreach (0 .. $a->nelem-1);
#use list
print $_ . "\n" foreach ($a->list);