【发布时间】:2017-02-21 10:01:31
【问题描述】:
我最近“自学”了 Python,以便为我的实验分析数据。因此,我在很多方面都一无所知。我已经设法使我的分析适用于某些文件,但在某些情况下它会发生故障,我认为这是错误编程的结果。
目前我导出一个包含 3 个 numpy 数组的文件。这些数组之一是我的信号(从 -10 到 10 的浮点值)。我想做的是将这个数组中的每个数据标准化为它之前的一系列值。 (即第 30001 个值必须从中减去前 3000 个值的平均值,然后必须将差除以这个相同的平均值(前 3000 个值)。我的数据以 100Hz 的速率收集,从而获得归一化在前 30 年代,我必须使用前面的 3000 个值。
就目前而言,这就是我设法使其工作的方式:
这会将信号存储到变量 photosignal 中
photosignal = np.array(seg.analogsignals[0], ndmin=1)
现在这是我用来在 30 秒的移动窗口上获得 delta F/F 的部分
normalizedphotosignal = [(uu-(np.mean(photosignal[uu-3000:uu])))/abs(np.mean(photosignal[uu-3000:uu])) for uu in photosignal[3000:]]
下面会在开头添加 3000 个值以保持数组的长度相同,因为稍后我必须将它锁定到另一个相同长度的列表中
holder =list(range(3000))
normalizedphotosignal = holder + normalizedphotosignal
我注意到,在某些文件中,这段代码给了我一个错误,因为它说“切片”是空的,因此它不能创建平均值。
我认为也许有更好的编程方法可以完全避免这个问题。或者这是解决这个问题的正确方法?
所以我尝试了解决方案,但它很慢,但它仍然给我“空切片错误”。 我翻过移动平均线后发现了这个方法:
def running_mean(x, N):
cumsum = np.cumsum(np.insert(x, 0, 0))
return (cumsum[N:] - cumsum[:-N]) / N
但是我无法将它适应我想要的输出。即(x-running average)/running average
【问题讨论】: