[英]Subclassing numpy.ndarray
我想實現一個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
來說很好,但是當n
很大時,我寧願避免額外的Python端賦值。
是否有其他方法可以避免這種額外的賦值,並仍然產生類mymat
的對象?
試試這個:
class mymat(np.ndarray):
def __new__(cls, n):
ret = np.eye(n)
return ret.view(cls)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.