[Numpy-discussion] Medians that ignore values

Charles R Harris charlesr.harris at gmail.com
Sun Sep 21 03:28:21 EDT 2008


On Sun, Sep 21, 2008 at 12:56 AM, David Cournapeau <
david at ar.media.kyoto-u.ac.jp> wrote:

> David Cournapeau wrote:
> > Anne Archibald wrote:
> >> If users are concerned about performance, it's worth noting that on
> >> some machines nans force a fallback to software floating-point
> >> handling, with a corresponding very large performance hit. This
> >> includes some but not all x86 (and I think x86-64) CPUs. How this
> >> compares to the performance of masked arrays is not clear.
> >
> > I spent some time on this. In particular, for max.min, I did the
> > following for the core loop (always return nan if nan is in the array):
> >
> >  /* nan + x and x + nan are nan, where x can be anything:
> > normal,
> >   * denormal, nan, infinite
> > */
> >   tmp = *((@typ@ *)i1) + *((@typ@
> > *)i2);
> >   if(isnan(tmp))
> > {
> >             *((@typ@ *)op) =
> > tmp;
> >   } else
> > {
> >             *((@typ@ *)op)=*((@typ@ *)i1) @OP@ *((@typ@ *)i2) ? *((@typ@
> > *)i1) : *((@typ@ *)i2);
> >   }
>
> Grr, sorry for the mangling:
>
> /* nan + x and x + nan are nan, where x can be anything: normal,
>  * denormal, nan, infinite */
> tmp = *((@typ@ *)i1) + *((@typ@*)i2);
> if(isnan(tmp)) {
>    *((@typ@ *)op) = tmp;
> } else {
>    *((@typ@ *)op) = *((@typ@ *)i1) @OP@ *((@typ@ *)i2) ? *((@typ@*)i1) :
> *((@typ@ *)i2);
> }
>

You can use type instead of typ so the code is a bit easier to read. It's
one of the changes I've made.

Chuck
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20080921/69874174/attachment.html>


More information about the NumPy-Discussion mailing list