一些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的新手,所以请原谅任何明显的错误或不当之处。
谢谢,
伙计
没有找到相关结果
已邀请:
1 个回复
捕暑句簿姓
,但是
是ufunc。下一页说明了如何确定ufunc的输出类型:http://docs.scipy.org/doc/numpy/reference/ufuncs.html#output-type-determination 如果
总是返回
,这并不令我感到惊讶(我没有看过源代码,但FFT显然不适合ufunc的定义)。如果是这种情况,您可以随时编写自己的包装器,然后调用它。