Python 子类化numpy.ndarray
我想实现Python 子类化numpy.ndarray,python,numpy,subclass,Python,Numpy,Subclass,我想实现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
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
,这很好,但是当n
较大时,我更愿意避免额外的Python端赋值
是否有其他方法可以避免这个额外的赋值,并且仍然生成一个类为mymat的对象?尝试以下方法:
class mymat(np.ndarray):
def __new__(cls, n):
ret = np.eye(n)
return ret.view(cls)
只是要确保你知道我想你想要的看法铸造,这应该在NPE的链接解释。