作者micangela (嘟)
看板Python
标题Re: [问题] numpy.ndarray subclass回传值形态
时间Thu Apr 28 11:39:58 2016
把 __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://webptt.com/cn.aspx?n=bbs/Python/M.1461814801.A.831.html
1F:推 ives0228: 谢谢!!!!!这个有用!! 04/29 00:07