python - 如何使用python计算Delta F/F?

标签 python numpy iterator

我最近“自学”了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-运行平均值)/运行平均值

最佳答案

好吧,感谢您的帮助和您推荐给我的帖子,我终于弄清楚了。

我的整个数据(300 000 +)的计算大约需要一秒钟!

我使用了以下代码:

def runningmean(x,N):
    cumsum =np.cumsum(np.insert(x,0,0))
    return (cumsum[N:] -cumsum[:-N])/N

photosignal = np.array(seg.analogsignal[0], ndmin =1) 

photosignalaverage = runningmean(photosignal, 3000) 
holder = np.zeros(2999)
photosignalaverage = np.append(holder,photosignalaverage)

detalfsignal = (photosignal-photosignalaverage)/abs(photosignalaverage)

Photosignal 将我的原始信号存储在 numpy 数组中。 Photosignalaverage 使用 cumsum 来计算 photosignal 中每个数据点的运行平均值。然后,我将前 2999 个值添加为 0,以保持与我的照片信号相同的列表大小。

然后,我使用基本的 numpy 计算来获取 delta F/F 信号。

再次感谢您的反馈,真的很有帮助!

关于python - 如何使用python计算Delta F/F?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42364187/

相关文章:

python - Django Stripe API 关键问题

python - 使用 totient 函数 - 未定义的问题

python - python 中的可变对象和常量

python - 多层前馈网络无法在 TensorFlow 中训练

python - 运行时警告: invalid value encountered in log

python - 如何从 Pandas 的 DataFrame 中删除 [ 一系列 ] 行?

python - 矩阵乘法的子集,快速且稀疏

c++ - 不同大小数组的迭代器

C++11 强制转换const迭代器指向shared_ptr对象的容器

java - HashMap 迭代循环中未定义的条目