[Numpy-discussion] Behaviour of ndarray and other objects with __radd__?
Olivier Delalleau
shish at keba.be
Wed Jun 15 11:34:22 EDT 2011
I don't really understand this behavior either, but juste note that
according to
http://docs.scipy.org/doc/numpy/user/c-info.beyond-basics.html
"This attribute can also be defined by objects that are not sub-types of the
ndarray"
-=- Olivier
2011/6/15 Jonathan Taylor <jonathan.taylor at utoronto.ca>
> Hi,
>
> I would like to have objects that I can mix with ndarrays in
> arithmetic expressions but I need my object to have control of the
> operation even when it is on the right hand side of the equation. I
> realize from the documentation that the way to do this is to actually
> subclass ndarray but this is undesirable because I do not need all the
> heavy machinery of a ndarray and I do not want users to see all of the
> ndarray methods. Is there a way to somehow achieve these goals?
>
> I would also very much appreciate some clarification of what is
> happening in the following basic example:
>
> import numpy as np
> class Foo(object):
> # THE NEXT LINE IS COMMENTED
> # __array_priority__ = 0
> def __add__(self, other):
> print 'Foo has control over', other
> return 1
> def __radd__(self, other):
> print 'Foo has control over', other
> return 1
>
> x = np.arange(3)
> f = Foo()
>
> print f + x
> print x + f
>
> yields
>
> Foo has control over [0 1 2]
> 1
> Foo has control over 0
> Foo has control over 1
> Foo has control over 2
> [1 1 1]
>
> I see that I have control from the left side as expected and I suspect
> that what is happening in the second case is that numpy is trying to
> "broadcast" my object onto the left side as if it was an object array?
>
> Now if I uncomment the line __array_priority__ = 0 I do seem to
> accomplish my goals (see below) but I am not sure why. I am
> surprised, given what I have read in the documentation, that
> __array_priority__ does anything in a non subclass of ndarray.
> Furthermore, I am even more surprised that it does anything when it is
> 0, which is the same as ndarray.__array_priority__ from what I
> understand. Any clarification of this would be greatly appreciated.
>
> Output with __array_priority__ uncommented:
>
> jtaylor at yukon:~$ python foo.py
> Foo has control over [0 1 2]
> 1
> Foo has control over [0 1 2]
> 1
>
> Thanks,
> Jonathan.
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion at scipy.org
> http://mail.scipy.org/mailman/listinfo/numpy-discussion
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20110615/34e8bdc4/attachment.html>
More information about the NumPy-Discussion
mailing list