Python-来自类实例数组的成员变量数组

时间:2018-08-16 16:28:37

标签: python python-3.x

我正在分析一堆带有时间戳的数据。我创建了一个类,其中包含一个数据点,以及与该数据点关联的数据(此处仅显示了几个其他值,但这可能是更大的元数据集合(数字和文本):

class SpectrumDataPoint(object):

    def __init__(self, timestamp, num_average, frame_time):
        self.timestamp = timestamp
        self. num_average = num_average
        self.frame_time = frame_time

然后,将这些点添加到循环内的列表中(未显示):

point = SpectrumDataPoint(datetime.datetime.now(), var1, var2)
spec.append(point)

我现在想做的是根据时间戳绘制数据以查找趋势。例如,我可能想针对timestamp绘制num_average

是否可以通过这种方式绘制数据,而不必遍历列表以在内存中创建数据的新副本?如果是这样,怎么办?

我希望像spec[1:10].num_average这样的东西可以工作。

1 个答案:

答案 0 :(得分:0)

matplotlib处理时间戳,因此您只需要提取值对。

t = []
vals = []

for spec in specs:
    t.append(spec.timestamp)
    vals.append(spec.num_average)

然后将其绘制

plt.plot(t, vals)
plt.show()

没有像spec[1:10].num_average这样的语法。最接近的是列表理解[s.num_average for s in spec[1:10]]。但是,即使它存在,它仍然会在后台进行迭代。 matplotlib将需要数组(连续的内存位置),并且您的值属于不同的对象。

但是,即使对于数百万个点,迭代时间也可以忽略不计。真正的瓶颈将是绘图本身,而实际上每次绘制成千上万个点时就会崩溃。