一些Numpy函数返回ndarray而不是我的子类

| 我将Numpy的ndarray类作为子类,添加了一些元数据和其他方法。我正在尝试按照本文和该文章中的说明进行操作。但是,某些Numpy(或Scipy)函数返回基类“ ndarray”而不是我的自定义子类。其他Numpy函数确实返回我的子类,但我不知道是什么原因造成的。如何使所有numpy / scipy函数返回我的子类?这是我所做的:
class Signal(np.ndarray):
    def __new__(cls, filename):
        #print \"In __new__\" #TEMP DEBUG
        ret = np.fromfile(filename, dtype = np.int32)
        ret = ret.view(cls) # convert to my class, i.e. Signal
        ret.parse_filename(filename)
        return ret

    def __array_finalize__(self, obj):
        #print \"in __array_finalize__\" #TEMP DEBUG
        if obj is None: return # shouldn\'t actually happen.
        # copy meta-fields from source, if it has them (otherwise put None\'s)
        self.filename = getattr(obj, \"filename\", None)
        self.folder = getattr(obj, \"folder\", None)
        self.label = getattr(obj, \"label\", None)
        self.date = getattr(obj, \"date\", None)
        self.time = getattr(obj, \"time\", None)
        #etc
这是一些用法示例: 这些工作符合预期-
>>> s = Signal(filename)
>>> s2 = s[10:20]
>>> type (s2)
<class \'__main__.Signal\'>
>>> s3 = s + 17
>>> type (s3)
<class \'__main__.Signal\'>
>>> s4 = np.sqrt(s)
>>> type(s4)
<class \'__main__.Signal\'>
但是,这些呢?
>>> s5 = log10(s)
>>> type(s5)
<type \'numpy.ndarray\'>
>>> s6 = np.fft.fft(s)
>>> type(s6)
<type \'numpy.ndarray\'>
查看
fft
log10
的代码,我可以看到它们使用了
asarray()
,它剥离了子类并返回ndarray,解释了行为。因此,我的问题不是“为什么,从技术上讲,这会发生”,而是一个设计问题-我应该如何编写我的代码,这样才不会发生? ps。我既是Python的新手,还是Stack Overflow的新手,所以请原谅任何明显的错误或不当之处。 谢谢, 伙计     
已邀请:
        我不确定
fft
,但是
np.log10
是ufunc。下一页说明了如何确定ufunc的输出类型:http://docs.scipy.org/doc/numpy/reference/ufuncs.html#output-type-determination 如果
fft
总是返回
ndarray
,这并不令我感到惊讶(我没有看过源代码,但FFT显然不适合ufunc的定义)。如果是这种情况,您可以随时编写自己的包装器,然后调用它。     

要回复问题请先登录注册