Try "PDL->new_from_specification". (Mobile)
On Jun 21, 2010, at 6:27 PM, P Kishor <[email protected]> wrote: > On Mon, Jun 21, 2010 at 6:10 PM, Craig DeForest > <[email protected]> wrote: >> Well, you have to copy every puddle anyway, to collate them as you >> desire. >> > > Ok. Then I need to understand your code first. Keep in mind, I am > still in trainer-wheels. > > > > Hi, I think I am missing a lot here... here is test code I tried out > > # add four 4x5 piddles to @p > push @p, sequence(4, 5) for (0 .. 3); > > # add a 3x5 piddle to @p. This is the "wrong" piddle. It really > should be 4x5 > push @p, sequence(3, 5); > > $dims = cat(pdl(map { $_->dims } @p))->mv(-1,0)->maximum; > print $dims; > > # Prints > # [4 5 4 5 4 5 4 5 3 5] > > $pdl = new_from_specification(0...@p, $dims); > > # Error: Undefined subroutine &main::new_from_specification called > > # I change the above line to > $pdl = PDL::new_from_specification(0...@p, $dims); > > # Now I get the following error > # Error: File Core.pm; Line 1789: Can't call method "initialize" > without a > # package or object reference <DATA> line 206 > > =for > > 1772 sub PDL::new_from_specification{ > 1773 my $class = shift; > 1774 my $type = ref($_[0]) eq 'PDL::Type' ? ${shift @_}[0] : > $PDL_D; > 1775 my $nelems = 1; my @dims; > 1776 for (@_) { > 1777 if (ref $_) { > 1778 barf "Trying to use non-piddle as dimensions?" unless > $_->isa('PDL'); > 1779 barf "Trying to use multi-dim piddle as dimensions?" > 1780 if $_->getndims > 1; > 1781 warn "creating > 10 dim piddle (piddle arg)!" > 1782 if $_->nelem > 10; > 1783 for my $dim ($_->list) {$nelems *= $dim; push @dims, > $dim} > 1784 } else { > 1785 barf "Dimensions must be positive" if $_<=0; > 1786 $nelems *= $_; push @dims, $_ > 1787 } > 1788 } > 1789 my $pdl = $class->initialize(); > 1790 $pdl->set_datatype($type); > 1791 $pdl->setdims([...@dims]); > 1792 print "Dims: ",(join ',',@dims)," DLen: ",(length $ > {$pdl->get_dataref}),"\n" if $PDL::debug; > 1793 return $pdl; > 1794 } > > =cut > > for my $i (0 .. $#p) { > $pdl->( ($i) ) .= $p[$i]->range(0 * $dims, $dims, 't'); > } > > I haven't reached this far, but if I do, what am I going to get? Is > $pdl going to be the new list of piddles (with the correct piddle). I > am guessing @p is going to be the new list, with the piddle at $p[4] > corrected. And, what are its dims going to be? I want the 3x5 piddle > to become 4x5 piddle. > _______________________________________________ Perldl mailing list [email protected] http://mailman.jach.hawaii.edu/mailman/listinfo/perldl
