On Mon, Jun 21, 2010 at 9:26 PM, Craig DeForest
<[email protected]> wrote:
> Try "PDL->new_from_specification".

much better, in that, no more error from the above call. That said,
the rest of the code doesn't really solve my problem. Here is my
sample code

# add four 4x5 piddles to @p
push @p, sequence(4, 5) for (0 .. 3);

# add a 3x5 piddle to @p. This is the piddle with wrong dims.
# It should be 4x5
push @p, sequence(3, 5);

# Craig's code suggestion hereon
$dims = cat(pdl(map { $_->dims } @p))->mv(-1,0)->maximum;

$pdl = PDL->new_from_specification(0...@p, $dims);

for my $i (0 .. $#p) {
    $pdl->( ($i) ) .= $p[$i]->range(0 * $dims, $dims, 't');
}

PDL: PDL::Ops::assgn(a,b): Parameter 'b'
PDL: Mismatched implicit thread dimension 7: should be 4, is 5
        
Actually, the last piddle needs to become 4x5



>
> (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.
>>
>



-- 
Puneet Kishor http://www.punkish.org
Carbon Model http://carbonmodel.org
Charter Member, Open Source Geospatial Foundation http://www.osgeo.org
Science Commons Fellow, http://sciencecommons.org/about/whoweare/kishor
Nelson Institute, UW-Madison http://www.nelson.wisc.edu
-----------------------------------------------------------------------
Assertions are politics; backing up assertions with evidence is science
=======================================================================

_______________________________________________
Perldl mailing list
[email protected]
http://mailman.jach.hawaii.edu/mailman/listinfo/perldl

Reply via email to