サブクラスの場合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 配列の場合、スカラー出力にはスカラー型があります。では、サブクラスに対して同じ動作をさせるにはどうすればよいでしょうか?
OSX 10.6でnumpy 1.6.2でPython 2.7.3を使用しています