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

作者: micangela (嘟)   2016-04-28 11:39:58
把 __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,只是用來應急
: 請問我該怎麼做才能用較通用的方式解決這個問題呢? 感謝!
作者: ives0228 (ives)   2016-04-29 00:07:00
謝謝!!!!!這個有用!!

Links booklink

Contact Us: admin [ a t ] ucptt.com