对于numpy.ndarray
子类,ufunc输出具有相同的类型。这通常是好的,但我希望具有标量输出的ufunc返回标量类型(例如numpy.float64
)。在
示例:
import numpy as np
class MyArray(np.ndarray):
def __new__(cls, array):
obj = np.asarray(array).view(cls)
return obj
a = MyArray(np.arange(5))
a*2
# MyArray([0, 2, 4, 6, 8]) => same class as original (i.e. MyArray), ok
a.sum()
# MyArray(10) => same as original, but here I'd expect np.int64
type(2*a) is type(a.sum())
# True
b = a.view(np.ndarray)
type(2*b) is type(b.sum())
# False
对于标准numpy数组,标量输出具有标量类型。那么如何对我的子类有相同的行为呢?在
我在OSX10.6上使用了Python2.7.3和Numpy1.6.2
您需要使用如下函数重写ndarray子类中的
__array_wrap__
,如下所示:在ufuncs之后调用
__array_wrap__
以执行清理工作。在默认实现的特殊情况下,精确的ndarray(但不是子类)将零秩数组转换为标量。至少对于某些版本的numpy来说是这样的。在相关问题 更多 >
编程相关推荐