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