如何使用python计算Delta F/F?
我最近自学了python,以便为我的实验分析数据。因此,我在很多方面都很无知。我已经设法使我的分析工作,为某些文件,但在某些情况下,它崩溃了,我想这是一个错误的编程结果 目前我导出了一个包含3个numpy数组的文件。其中一个数组是我的信号(浮点值从-10到10)。我想做的是将这个数组中的每个数据规范化为一系列值,这些值位于它之前。(即,30001值必须减去之前3000个值的平均值,然后差值必须除以相同的平均值(之前3000个值)。我的数据以100Hz的速率收集,因此为了获得alst 30s的标准化,我必须使用之前3000个值 就目前情况而言,这就是我如何使其工作的: 这将信号存储到变量photosignal中 现在这是我用来在30秒的移动窗口上得到delta F/F的部分 下面在开始处添加3000个值以保持数组的长度不变,因为稍后我必须将其时间锁定到另一个相同长度的列表中 我注意到,在某些文件中,这段代码给了我一个错误,因为它表示“切片”为空,因此无法创建平均值 我想也许有一种更好的编程方法可以完全避免这个问题,或者这是解决这个问题的正确方法 所以我尝试了这个解决方案,但是速度很慢,而且仍然会给我“空片错误”。 我浏览了移动平均线的帖子,发现了这个方法:如何使用python计算Delta F/F?,python,numpy,iterator,Python,Numpy,Iterator,我最近自学了python,以便为我的实验分析数据。因此,我在很多方面都很无知。我已经设法使我的分析工作,为某些文件,但在某些情况下,它崩溃了,我想这是一个错误的编程结果 目前我导出了一个包含3个numpy数组的文件。其中一个数组是我的信号(浮点值从-10到10)。我想做的是将这个数组中的每个数据规范化为一系列值,这些值位于它之前。(即,30001值必须减去之前3000个值的平均值,然后差值必须除以相同的平均值(之前3000个值)。我的数据以100Hz的速率收集,因此为了获得alst 30s的标准
def running_mean(x, N):
cumsum = np.cumsum(np.insert(x, 0, 0))
return (cumsum[N:] - cumsum[:-N]) / N
然而,我很难将它调整到我想要的输出,即(x-运行平均值)/运行平均值您的方法是正确的。但是,您在理解列表时犯了一个错误:您使用
uu
作为索引,而uu
是输入数据的元素photosignal
你想要这样的东西:
normalizedphotosignal2 = np.zeros((photosignal.shape[0]-3000))
for i, uu in enumerate(photosignal[3000:]):
normalizedphotosignal2 = (uu - (np.mean(photosignal[i-3000:i]))) / abs(np.mean(photosignal[i-3000:i]))
请记住,python中for循环的速度相对较慢。如果性能是一个问题,您可以尝试避免for循环,而使用numpy方法(例如,查看)
希望这能有所帮助。好吧,多亏了你的帮助和你推荐给我的帖子,我终于找到了答案 我的整个数据(300000+)的计算大约需要一秒钟 我使用了以下代码:
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,以保持与我的photosignal相同的列表大小
然后,我使用基本的numpy计算得到delta F/F信号
再次感谢您的反馈,真的很有帮助!谢谢,很多人都会尝试使用您提到的移动平均法!您在哪里使用
i
?您的意思是使用i-3000:i
?@DavidCullen:您是对的..我忘了修复我打算修复的错误。。。
def running_mean(x, N):
cumsum = np.cumsum(np.insert(x, 0, 0))
return (cumsum[N:] - cumsum[:-N]) / N
normalizedphotosignal2 = np.zeros((photosignal.shape[0]-3000))
for i, uu in enumerate(photosignal[3000:]):
normalizedphotosignal2 = (uu - (np.mean(photosignal[i-3000:i]))) / abs(np.mean(photosignal[i-3000:i]))
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)