Re: [問題] numpy.ndarray subclass回傳值形態

看板Python作者 (嘟)時間9年前 (2016/04/28 11:40), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/2 (看更多)
把 __array_wrap__ 改寫,若回傳值是 0-D array 就直接回傳數值。 def __array_wrap__(self, obj): if obj.shape == (): return obj[()] else: return np.ndarray.__array_wrap__(self, obj) ※ 引述《ives0228 (ives)》之銘言: : 我有一個numpy.ndarray的subclass : 基本上都沒什麼問題, : 只有當我使用numpy.ndarray的成員函數時 : 原本應該回傳float或int的函數,現在回傳的值都是我的subclass的instance : 例如: : 若是 a = numpy.array([1, 2, 3]); b = a.sum() : 則 b = 6,且 type(b) = numpy.int64 : 但若 a = myClass.ArraySubclass([1, 2, 3]); b = a.sum() : 則 b = ArraySubclass(6),且 type(b) = myClass.ArraySubclass : 其中myClass是我自己寫的module,而ArraySubclass則是ndarray的subclass : 我嘗試自己定義__array_wrap__及__array_prepare__ : 但是頂多把回傳值的type變成numpy.ndarray, : 而無法像原本a是numpy.ndarray時,能夠自動回傳int或float : 目前的解決方案是針對常用的ndarray成員函數去重新定義並指定type : 但我覺得這方法頗蠢,也不general,只是用來應急 : 請問我該怎麼做才能用較通用的方式解決這個問題呢? 感謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 70.114.251.20 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1461814801.A.831.html

04/29 00:07, , 1F
謝謝!!!!!這個有用!!
04/29 00:07, 1F
文章代碼(AID): #1N8OOHWn (Python)
文章代碼(AID): #1N8OOHWn (Python)