[SciPy-User] scipy.stats.nanmedian

Keith Goodman kwgoodman@gmail....
Fri Jan 22 10:09:17 CST 2010


On Thu, Jan 21, 2010 at 8:18 PM,  <josef.pktd@gmail.com> wrote:
> On Thu, Jan 21, 2010 at 10:01 PM, Keith Goodman <kwgoodman@gmail.com> wrote:
>> On Thu, Jan 21, 2010 at 6:41 PM, Pierre GM <pgmdevlist@gmail.com> wrote:
>>> On Jan 21, 2010, at 9:28 PM, Keith Goodman wrote:
>>>> That's the only was I was able to figure out how to pull 1.0 out of
>>>> np.array(1.0). Is there a better way?
>>>
>>>
>>> .item()
>>
>> Thanks. item() looks better than tolist().
>>
>> I simplified the function:
>>
>> def nanmedian(x, axis=0):
>>    x, axis = _chk_asarray(x,axis)
>>    if x.ndim == 0:
>>        return float(x.item())
>>    x = x.copy()
>>    x = np.apply_along_axis(_nanmedian,axis,x)
>>    if x.ndim == 0:
>>        x = float(x.item())
>>    return x
>>
>> and opened a ticket:
>>
>> http://projects.scipy.org/scipy/ticket/1098
>
>
> How about getting rid of apply_along_axis?    see attachment
>
> I don't know whether or how much faster it is, but there is a ticket
> that the current version is slow.
> No hidden bug or corner case guarantee yet.

It is faster. But here is one case it does not handle:

>> nanmedian([1, 2])
   array([ 1.5])
>> np.median([1, 2])
   1.5

I'm sure it could be fixed. But having to fix it, and the fact that it
is a larger change, decreases the likelihood that it will make it into
the next version of scipy. One option is to make the small bug fix I
suggested (ticket #1098) and add the corresponding unit tests. Then we
can take our time to design a better version of nanmedian.


More information about the SciPy-User mailing list