3
我想要实现的numpy.ndarray
一个子类,像这样的东西覆盖的构造:子类numpy.ndarray
class mymat(numpy.ndarray):
def __new__(cls, n, ...):
ret = np.eye(n)
# make some modifications to ret
return ret
遗憾的是,此构造返回的对象的类型不是cls
,而是numpy.ndarray
。
设置类ret
与
ret.__class__ = cls # bombs: TypeError: __class__ assignment: only for heap types
将无法正常工作。
一个可行的办法是这样的
class mymat(numpy.ndarray):
def __new__(cls, n, ...):
ret = super(mymat, cls).__new__(cls, (n, n))
ret[:] = np.eye(n)
# make some modifications to ret
return ret
这是适合于小n
,但我宁愿避免额外的Python端分配时n
大。
是否有其他方法可以避免这种额外的分配,并且仍然产生类mymat
的对象?
只是确保你意识到http://docs.scipy.org/doc/numpy/user/basics.subclassing.html – NPE 2014-10-09 18:19:03
我想你想查看其铸造应在NPE的链接中解释。 – mgilson 2014-10-09 18:20:45