[Numpy-discussion] Scalar-ndarray arguments passed to not_equal
Keith Goodman
kwgoodman at gmail.com
Thu Feb 11 16:16:39 EST 2010
On Thu, Feb 11, 2010 at 12:47 PM, Robert Kern <robert.kern at gmail.com> wrote:
> On Thu, Feb 11, 2010 at 14:40, Keith Goodman <kwgoodman at gmail.com> wrote:
>> On Thu, Feb 11, 2010 at 12:32 PM, Friedrich Romstedt
>> <friedrichromstedt at gmail.com> wrote:
>>>> Hey! You broke my numpy :)
>>>>
>>>>>> def addbug(x, y):
>>>> ...: return x - y
>>>> ...:
>>>>>> old_funcs = np.set_numeric_ops(add=addbug)
>>>>>> np.array([1]) + np.array([1])
>>>> array([0])
>>> Yea, that's what I meant. Great.
>>>
>>> :-) :-)
>>
>> Who needs to type np.dot when you can do:
>>
>>>> def dotmult(x, y):
>> ....: return np.dot(x, y)
>> ....:
>>>> old_funcs = np.set_numeric_ops(multiply=dotmult)
>>>>
>>>> np.array([1, 2, 3]) * np.array([1, 2, 3])
>> 14
>>
>> I can see many bugs coming my way...
>
> Context managers can help:
>
>
> from __future__ import with_statement
>
> from contextlib import contextmanager
>
> import numpy as np
>
>
> @contextmanager
> def numpy_ops(**ops):
> old_ops = np.set_numeric_ops(**ops)
> try:
> yield
> finally:
> np.set_numeric_ops(**old_ops)
>
>
> with numpy_ops(multiply=...):
> print np.array([1, 2, 3]) * np.array([1, 2, 3])
Yes, much cleaner.
The problem I have now is that I don't know where to place the line of
code that changes the meaning of numpy's equal. I don't know when
someone will do
numpy array == myarray
The execution of that line goes to Numpy, not my class. And I don't
want to overload Numpy's comparison operators in my entire module.
More information about the NumPy-Discussion
mailing list