【发布时间】:2016-01-25 23:52:17
【问题描述】:
我正在编写一个简单的类来检索以恒定采样率 Fs 数字化的信号 x。数字化从时间t0 开始。给定信号长度N = len(x)、采样率和初始时间,信号的时基是唯一确定的。我很少需要访问时基,但我想在需要时使用一种简单的方法。下面,我使用property() 装饰器实现了我想要的时基功能的最小工作示例:
import numpy as np
class Signal(object):
def __init__(self, x, Fs, t0):
self.x = x
self.Fs = Fs
self.t0 = t0
return
@property
def t(self):
return self.t0 + (np.arange(len(self.x)) / self.Fs)
我想了解时基属性Signal.t 的创建和“持久性”。以下面的示例用例为例:
x = np.arange(10)
Fs = 1.
t0 = 0.
sig = Signal(x, Fs, t0)
print sig.t
时基数组t是什么时候生成的?在初始化期间还是在调用print sig.t 时动态调用?如果sig.t 属性是动态计算的,它会在print 命令之外持续吗? (即是否已分配内存以将时基存储为对象属性?)。
虽然上面是一个简单的例子,但我的典型信号非常大,我确实不想要为每个信号创建和存储时基的内存开销。但是,我想要一种根据需要动态生成时间基准的简单方法;时基在一次性使用后不应作为对象属性持续存在(例如,用于创建原始信号图)。
如果 property() 装饰器没有提供这种所需的功能(即最小的内存开销,在需要的基础上易于使用),我应该使用什么?只是一个类方法?还是有不同的、更优化的解决方案?谢谢!
【问题讨论】:
标签: python python-2.7 class memory properties