[Numpy-discussion] Preventing an ndarray subclass from returning new subclass instances for std(), etc
Wes McKinney
wesmckinn at gmail.com
Sun Sep 18 16:58:52 EDT 2011
On Sun, Sep 18, 2011 at 4:25 PM, Pierre GM <pgmdevlist at gmail.com> wrote:
>
> On Sep 18, 2011, at 21:25 , Stéfan van der Walt wrote:
>
>> On Sun, Sep 18, 2011 at 9:48 AM, Keith Hughitt <keith.hughitt at gmail.com> wrote:
>>> Interesting. It works as expected when called as a method:
>>>
>>> In [10]: x = np.ma.array([[1,2,3]])
>>> In [11]: x.std()
>>> Out[11]: 0.81649658092772603
>>
>> I'm guessing that np.ma.array implements its own std function, but I
>> haven't checked.
>
> It does. np.std tries first to call the .std method of the input argument.
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion at scipy.org
> http://mail.scipy.org/mailman/listinfo/numpy-discussion
>
I thought maybe you can intercept 0-dim objects and return self.item()
in array_finalize, but not dice. This is really weird:
import numpy as np
class example(np.ndarray):
def __new__(cls, arr):
return np.array(arr).view(cls)
def __array_finalize__(self, obj):
print 'foo'
if self.ndim == 0:
return self.item()
In [6]: foo = example(np.arange(10))
foo
In [7]: foo.std()
foo
foo
foo
foo
foo
foo
foo
Out[7]: example(2.8722813232690143)
More information about the NumPy-Discussion
mailing list