Re: [問題] numpy.ndarray subclass回傳值形態
把 __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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
Python 近期熱門文章
PTT數位生活區 即時熱門文章