[Numpy-discussion] Efficient operator overloading
Perry Greenfield
perry@stsci....
Wed Apr 18 16:15:04 CDT 2007
On Apr 18, 2007, at 2:14 PM, Sturla Molden wrote:
[...]
>
> Let us assume again we have an expression like
>
> y = a * b + c * d
>
> where a,b,c and d are all arrays or matrices. In this case, the
> overloaded * and + operators woud not return a temporary array but an
> unevaluated expression of class Expr. Thus we would get
>
> tmp1 = Expr('__mul__',a,b) # symbolic representation of 'a * b'
> tmp2 = Expr('__mul__',c,d) # symbolic representation of 'c * d'
> tmp3 = Expr('__add__',tmp1,tmp1) # symbolic "a * b + c * d"
> del tmp1
> del tmp2
> y = tmp3 # y becomes a reference to an unevaluated expression
>
> Finally, we need a mechanism to 'flush' the unevaluated expression.
> Python does not allow the assignment operator to be evaluated, so one
> could not depend on that. But one could a 'flush on read/write'
At the risk of being remembered only for dredging up hacks, there is
something similar that would at least serve for someone to try work
along these lines. Nothing prevents you from overloading one of the
augmented operators (e.g., |=) to trigger the evaluation. True, it
uses up one of these that can be used for a numeric purpose, but it
can at least be used to test the idea to see how workable it is (I
forget who originally suggested this but I heard it suggested it at
the Long Beach Python Conference; it might have been Tim Peters).
Perry
More information about the Numpy-discussion
mailing list