I'm not sure what $i is ($idx?) but the warning is from this expression: $a > 0 && $a->index($i) < 0
And the problem is that you are using the perl logical && rather than the overloaded bitwise & to combine the masks. Change to ($a > 0) & ($a->index($i) < 0) and things should work better. I've added some parens to avoid warning about possible precedence issues.... Cheers, Chris On Fri, Sep 26, 2014 at 2:16 PM, Vikas N Kumar <vi...@cpan.org> wrote: > Hi > > I am stumped by the problems I face with simple conditionals in using > the which() function. I have tried many different ways in trying to > solve it but none of them give me the result I want. > > Here is a sample: > > use PDL; > # a random list of values that are above and below 0 > my $a = randsym(100) - 0.5; > > # create a lag of 1 > my $idx = xvals($a->dims) - 1; > $i = $i->setbadif($i < 0)->setbadtoval(0); # can this be more elegant ? > > # find all the positions where $a[i] > 0 and $a[i - 1] < 0 > # in essence where $a crosses the zero line > my $b = zeroes($a->dims); > my $b_idx = which($a > 0 && $a->index($i) < 0); > > # set those points as 1 > $b->index($b_idx) .= 1; > > Everytime I run this I get "multielement piddle in conditional > expression" errors. > > I have not been able to find an elegant solution to this problem. I > cannot seem to create a mask that has more than 1 piddle comparisons. > > Please help. > > Thanks > Vikas > > > _______________________________________________ > Perldl mailing list > Perldl@jach.hawaii.edu > http://mailman.jach.hawaii.edu/mailman/listinfo/perldl _______________________________________________ Perldl mailing list Perldl@jach.hawaii.edu http://mailman.jach.hawaii.edu/mailman/listinfo/perldl