[Numpy-discussion] using numpy functions on an array of objects
Sebastian Walter
sebastian.walter@gmail....
Fri Jan 30 12:03:00 CST 2009
Hey,
What is the best solution to get this code working?
Anyone a good idea?
------------------ test.py -----------------------------------------------
import numpy
import numpy.linalg
class afloat:
def __init__(self,x):
self.x = x
def __add__(self,rhs):
return self.x + rhs.x
def sin(self):
return numpy.sin(self.x)
def inv(self):
return numpy.linalg.inv(self.x)
def trace(self):
return 0
y = afloat(numpy.eye(3))
z = afloat(numpy.ones(3))
print y + z # works
print numpy.sin(y) # works
print numpy.trace(y) # doesn't work...???
print numpy.linalg.inv(y) # doesn't work ...???
-------------------- end test.py --------------------------------
=== Explanation why I need that ===
I have the following problem. I need to do numerical calculations on
generalized versions of real numbers.
In particular with truncated Taylor polynomials. I've implemented
that as a class that I called TC.
To define what the multiplication of two Taylor polynomials is I use
operator overloading.
Additionally, I need to compute sine, cosine, exp, etc. of Taylor polynomials.
For that, I can use the numpy functions. Numpy is apparently smart
enough to call the member function sin(self) of my class afloat
when it realizes that the argument of numpy.sin is not a known type.
This is really great. However, some functions are not as smart: Among them
trace
inv
dot
As a workaround, i could this:
def inv(X):
if X.__class__ == afloat:
return X.inv()
else:
return numpy.linalg.inv(X)
This is somewhat OK, but I'd like to use already existing Python code
that uses Numpy internally.
So I have to rely that numpy.inv(X) calls X.inv() when X is object of my class.
best regards,
Sebastian
More information about the Numpy-discussion
mailing list