[SciPy-User] scipy.stats.nanmedian
josef.pktd at gmail.com
josef.pktd at gmail.com
Thu Jan 21 21:15:59 EST 2010
On Thu, Jan 21, 2010 at 8:54 PM, Keith Goodman <kwgoodman at gmail.com> wrote:
> I noticed a couple of issues with nanmedian in scipy.stats:
>
>>> from scipy.stats import nanmedian
>>> nanmedian(1)
> ---------------------------------------------------------------------------
> ValueError: axis must be less than arr.ndim; axis=0, rank=0.
>>> nanmedian(True)
> ---------------------------------------------------------------------------
> ValueError: axis must be less than arr.ndim; axis=0, rank=0.
>>> nanmedian(np.array(1))
> ---------------------------------------------------------------------------
> ValueError: axis must be less than arr.ndim; axis=0, rank=0.
>>> nanmedian(np.array([1, 2, 3]))
> array(2.0)
>
> Changing the function from the original:
>
> def nanmedian(x, axis=0):
> x, axis = _chk_asarray(x,axis)
> x = x.copy()
> return np.apply_along_axis(_nanmedian,axis,x)
>
> to this (I know, it is not pretty):
>
> def nanmedian(x, axis=0):
> if np.isscalar(x):
> return float(x)
> x, axis = _chk_asarray(x, axis)
> if x.ndim == 0:
> return float(x.tolist())
> x = x.copy()
> x = np.apply_along_axis(_nanmedian, axis, x)
> if x.ndim == 0:
> x = float(x.tolist())
> return x
Can you open a ticket, so that I don't forget to look at it?
I will need to play with it. There are some things that I don't
understand right away.
What's the difference between isscalar and ndim=0 ?
Why do you have the tolist()
Thanks,
Josef
> gives the expected results:
>
>>> nanmedian(1)
> 1.0
>>> nanmedian(True)
> 1.0
>>> nanmedian(np.array(1))
> 1.0
>>> nanmedian(np.array([1, 2, 3]))
> 2.0
>
> which agree with numpy:
>
>>> np.median(1)
> 1.0
>>> np.median(True)
> 1.0
>>> np.median(np.array(1))
> 1.0
>>> np.median(np.array([1, 2, 3]))
> 2.0
>
> I'm keeping a local copy of the changes I made for my own package. But
> it would be nice (for me) if this was fixed upstream. Are the changes
> above good enough for scipy?
>
> (Another difference from np.median that I noticed is that the default
> axis for np.median is None and for scipy.stats.nanmean it is 0. But
> perhaps it is too late to change that.)
> _______________________________________________
> SciPy-User mailing list
> SciPy-User at scipy.org
> http://mail.scipy.org/mailman/listinfo/scipy-user
>
More information about the SciPy-User
mailing list