簡體   English   中英

子類化numpy.ndarray

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM