Thanks a lot, Chris! Marek
On Tue, 16 Jun 2015 at 15:57 Chris Marshall <devel.chm...@gmail.com> wrote: > Marek- > > I've opened a highest priority bug report based on your information: > > http://sourceforge.net/p/pdl/bugs/390 > > Could you add information on your system specifics to the ticket > for reference (the output of perldl -V has the main information)? > We'll be updating the ticket as information becomes available. > > Thanks for reporting the problem! > > Chris > > > > > On 6/16/2015 09:49, Marek Gierliński wrote: > > This is very bad news for me. I just searched through my scripts and found > 586 instances of 'stats'. If this is not corrected, I have to assume that > all of them might potentially produce incorrect results, without even > failing (like in the if($s > 0) example). > > We've been using 2.007 for a couple of months now. I'm not even sure if > my recent results are correct. > > Marek > > On Tue, 16 Jun 2015 at 14:43 Chris Marshall <devel.chm...@gmail.com> > wrote: > >> That definitely seems like a bug to me. Thanks for the cross-check, >> Marek. >> Devels, I see the same in the latest PDL release so it is not a PDL-2.007 >> only issue. >> >> >> --Chris >> >> >> On 6/16/2015 09:36, Marek Gierliński wrote: >> >> OK, thank you for your explanations. I'm not sure if all of this makes >> sense. If you try >> >> print $s > 5; >> >> in the above example, you will get 'BAD'. 5 is just a scalar and not a >> bad value. And $s is a one-dimensional piddle with a value different from >> the bad value. Neither of the values in this conditional expression is bad. >> Why does it return a string 'BAD'? >> >> Marek >> >> On Tue, 16 Jun 2015 at 14:24 Chris Marshall <devel.chm...@gmail.com> >> wrote: >> >>> This result seems to violate the principle of least surprise. >>> On the LHS we have a PDL with badvalue(0) and on the RHS we >>> have a perl scalar with value 0 (which happens to be the bad >>> value for the PDL). >>> >>> It seems surprising that $pdl > 0 is actually $pdl > pdl(0)->badvalue(0) >>> >>> Thoughts? >>> Chris >>> >>> >>> -------- Forwarded Message -------- Subject: Re: [Pdl-general] Weird >>> behaviour of stats with bad values Date: Tue, 16 Jun 2015 09:18:29 >>> -0400 From: Chris Marshall <devel.chm...@gmail.com> >>> <devel.chm...@gmail.com> To: Derek Lamb <de...@boulder.swri.edu> >>> <de...@boulder.swri.edu>, Marek Gierliński <marek.gierlin...@gmail.com> >>> <marek.gierlin...@gmail.com> CC: pdl-gene...@lists.sourceforge.net >>> >>> >>> I think the problem is that if $s is a badvalue piddle with the >>> badvalue=0 >>> then $s>0 is $s>BAD which is BAD. If you use a value for badvalue that >>> is >>> not in the comparison, you should be good. >>> >>> --Chris >>> >>> On 6/16/2015 09:11, Derek Lamb wrote: >>> >>> Thanks for the simple example. That helps a lot. >>> >>> The actual problem is that piddles with the badflags set always >>> evaluate to BAD when element-wise logical operations are performed on them. >>> >>> "print $s<0" prints BAD instead of 0 or 1. "print $x>0" also prints >>> [BAD BAD BAD BAD]. >>> >>> $m and $s have their badflags set (as they should, since they were >>> made from partially-bad data). You can check if they can be safely >>> cleared, and clear them if so, with $s->check_badflag, etc. Since $m and >>> $s are 1-element piddles, you can also just set them directly to their >>> scalar values, for example >>> >>> map{$_=$_->sclr} ($m,$s)=stats($x); #if you know they are only going >>> to be 1 element piddles >>> OR >>> map{$_=$_->((0))} ($m,$s)=stats($x); #if you just want the first value >>> >>> The fact that $m and $s are 1-element piddles is likely what is >>> causing your problem. My guess is that this behavior has changed (perhaps >>> intentionally, perhaps not) between your old version and more recent >>> versions, and if you were getting $m and $s as simple perl scalars before >>> you would not have seen this problem. I can verify that stats() has >>> returned 1-piddles and not perl scalars at least as far back as PDL-2.4.11. >>> >>> cheers, >>> Derek >>> >>> On Jun 16, 2015, at 6:29 AM, Marek Gierliński < >>> marek.gierlin...@gmail.com> wrote: >>> >>> Oops, sorry, I missed a line when copying the text. Here is the code >>> again. >>> >>> use PDL; >>> use PDL::NiceSlice; >>> >>> >>> my $x = pdl(1, 2, 3, 0); >>> $x->badflag(1); >>> $x->badvalue(0); >>> >>> print "x = $x\n"; >>> >>> my ($m, $s) = stats($x); >>> >>> print "m = $m, s = $s\n"; >>> print "s greater than zero\n" if $s > 0; >>> print "s less than zero\n" if $s < 0; >>> print "s equals zero\n" if $s == 0; >>> >>> >>> On Tue, 16 Jun 2015 at 12:20 Chris Marshall <devel.chm...@gmail.com> >>> wrote: >>> >>>> Hi Marek- >>>> >>>> Do you have a complete example showing the problem? >>>> You don't show where $m and $s are being set below. >>>> >>>> Thanks, >>>> Chris >>>> >>>> >>>> On 6/16/2015 07:04, Marek Gierliński wrote: >>>> >>>> I have recently encountered a weird problem with stats (or statsover) >>>> using bad values. The resulting numbers have a strange property, they >>>> always return true in comparisons. This code: >>>> >>>> use PDL; >>>> use PDL::NiceSlice; >>>> >>>> my $x = pdl(1, 2, 3, 0); >>>> $x->badflag(1); $x->badvalue(0); >>>> >>>> print "m = $m, s = $s\n"; >>>> print "s greater than zero\n" if $s > 0; >>>> print "s less than zero\n" if $s < 0; >>>> print "s equals zero\n" if $s == 0; >>>> >>>> returns the following output: >>>> >>>> x = [1 2 3 BAD] >>>> m = 2, s = 1 >>>> s greater than zero >>>> s less than zero >>>> s equals zero >>>> >>>> which doesn't make any sense. Can anyone explain this? I always >>>> assumed that 'stats' returned ordinary Perl scalars, but this must be >>>> something different. >>>> >>>> I'm using PDL version 2.007. We had an older version installed for a >>>> long time and I think this problem appeared when we upgraded to 2.007. >>>> >>>> Marek >>>> >>>> >>> ------------------------------------------------------------------------------ >>> _______________________________________________ >>> pdl-devel mailing list >>> pdl-devel@lists.sourceforge.net >>> https://lists.sourceforge.net/lists/listinfo/pdl-devel >>> >> >> >
------------------------------------------------------------------------------
_______________________________________________ pdl-devel mailing list pdl-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/pdl-devel