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