[Numpy-discussion] trouble subclassing ndarray
Fabrice Silva
silva@lma.cnrs-mrs...
Wed Dec 3 09:24:43 CST 2008
Le mercredi 03 décembre 2008, Sébastien Barthélemy a écrit :
> Hello,
Hi Sebastien!
> I'm trying to write a small library of differential geometry, and I
> have some trouble subclassing ndarray.
> I'd like an HomogeneousMatrix class that subclasse ndarray and
> overloads some methods, such as inv().
> Here is my first try, the inv() function and the inv_v1() method work
> as expected, but the inv_v2() and inv_v3() methods do not change the
> object at all. Can somebody explain me what is happening here ?
>
> import numpy as np
> def inv(H):
> """
> inverse of an homogeneous matrix
> """
> R = H[0:3,0:3]
> p = H[0:3,3:4]
> return np.vstack( (np.hstack((R.T,-np.dot(R.T,p))), [0,0,0,1]))
>
> class HomogeneousMatrix(np.ndarray):
> def __new__(subtype, data=np.eye(4)):
> subarr = np.array(data)
> if htr.ishomogeneousmatrix(subarr):
> return subarr.view(subtype)
> else:
> raise ValueError
> def inv_v1(self):
> self[0:4,0:4] = htr.inv(self)
> def inv_v2(self):
> data = htr.inv(self)
> self = HomogeneousMatrix(data)
> def inv_v3(self):
> self = htr.inv(self)
There is something I missed: what is htr? I guess htr.inv is the inv
function defined before the class.
Another point: it seems weird to me that, in the class' methods inv_v2
and inv_v3, you 'unref' the previous instance of HomogeneousMatrix and
link the 'self' label to a new instance... In inv_v1, you just modify
the coefficient of the Homogeneous Matrix with the coefficient of
htr.inv(self)
--
Fabrice Silva <silva@lma.cnrs-mrs.fr>
LMA UPR CNRS 7051 - équipe S2M
More information about the Numpy-discussion
mailing list