Yeah, same with parentheses, and $b are just integers:
So the strange thing is that when I take a slice of say, the first 100
elements of $b, it works fine--a slice of 500 gives the error. Odd, no?

perldl> $c=($a==$b->dummy)
multielement piddle in conditional expression

perldl> $slice=slice $b, '0:100'

perldl> $c=($a==$slice->dummy)

perldl> p dims $c
480000 101
perldl> $slice=slice $b, '0:500'

perldl> $c=($a==$slice->dummy)
multielement piddle in conditional expression


On Sun, Sep 14, 2008 at 4:00 PM, Craig DeForest
<[EMAIL PROTECTED]>wrote:

> Does $b contain something special?  I'm using floor(random(500)*48000), but
> maybe you've got a less generic set of values in there...
>
> On Sep 14, 2008, at 8:53 PM, Steve Cicala wrote:
>
> Thanks for the DiskCache pointer.
> The exact expression that gives me the error (even after invoking
> $PDL::BIGPDL=1) is
>
> $c=$a==$b->dummy
>
> where
>
> $b is Double D [500]
> $a is Double D [480000]
>
>
> On Sun, Sep 14, 2008 at 3:41 PM, Craig DeForest <[EMAIL PROTECTED]
> > wrote:
>
>> Steve,
>>
>> Are you sure you sent us the exact expression you used below?  For
>> example, if you masked
>> your very large data set with something like:
>>
>>        $c = maximum( ($a==$b->dummy)->xchg(0,1)) != 0 &&
>> (xvals($b->dim(0))<5000))
>>
>> to look at only the first 5000 rows, then the "&&" would throw the
>> 'multielement' error, because && is a short-circuiting operation.  In
>> general, you have to be in a branching logical construct to throw that
>> error, because there's no way to evaluate the argument of the branch in
>> anything but Perl's boolean context.  The branching logical constructs are
>> the tests of the 'if', 'unless', 'elsif', 'for(;;)', 'while', and 'until'
>> statements, and the '?:', '&&', and '||' operators.  The reason your error
>> message is puzzling is that your example doesn't contain any of those, so if
>> you are using that exact expression it indicates something extremely
>> peculiar going on in the guts of PDL.
>>
>>
>> On Sep 14, 2008, at 8:11 PM, Steve Cicala wrote:
>>
>>>
>>>
>>> (I am using this to collect indicies in a that correspond with elements
>>> in
>>> b:
>>> $d=which(maximum (($a==$b->dummy)->xchg(0,1))!=0)
>>> ).
>>>
>>> Now, when I try to use this operation for large numbers (i.e. $a is
>>> 480000x1
>>> and $b is 500x1) I get:
>>>
>>> 'multielement piddle in a conditional expression'
>>>
>>> --And I get this error whether calculating $c on its own, or just
>>> sticking
>>> the expression that generates $c into the one that generates $d.
>>>
>>
>>
>
>
_______________________________________________
Perldl mailing list
[email protected]
http://mailman.jach.hawaii.edu/mailman/listinfo/perldl

Reply via email to