[Numpy-discussion] subclassing matrix
Sat Jan 12 21:59:20 CST 2008
Thanks Stefan and Colin,
The subclass documentation made this a little clearer now. Instead of
using a super() call in __new__, I now do this:
#construct a matrix based on the input
ret = _N.matrix(data, dtype=dtype)
#promote it to Vector
ret = ret.view(cls)
The second statement there also invokes a call to __array_finalize__,
which ensures that the Format attribute is attached to the instance.
Then I validate and manipulate the shape of the matrix so that it is a
(3,1) vector. Now the instance builder is proper.
my __array_finalize__ looks like this:
def __array_finalize__(self, obj):
self.Format = getattr(obj, "Format", FMT_VECTOR_DEFAULT)
Also, after learning about the view method, I am now doing the
following in Vector.cross:
def cross(self, other):
"""Cross product of this vector and another vector"""
#calling the result's view method promotes it to Vector
result = _N.cross(self, other, axis=0)
result = result.view(type(self))
It also works if I just use Vector(...), but it is my gut feeling that
invoking a view vs. instantiating a new Vector instance is cheaper?
Now I can add more unit tests.
More information about the Numpy-discussion