数据是一个包含2500次测量时间序列的矩阵。我需要随时间对每个时间序列进行平均,丢弃峰值附近记录的数据点(在tspike-dt * 10 ... tspike + 10 * dt的时间间隔内)。针对每个神经元的尖峰时间数是可变的,并存储在具有2500个条目的字典中。我当前的代码遍历神经元和尖峰时间,并将屏蔽值设置为NaN。然后bottleneck.nanmean()被调用。然而,这个代码在当前版本中会变慢,我想知道更快的解决方案。谢谢!如何从时间点为numpy数组创建掩码?
import bottleneck
import numpy as np
from numpy.random import rand, randint
t = 1
dt = 1e-4
N = 2500
dtbin = 10*dt
data = np.float32(ones((N, t/dt)))
times = np.arange(0,t,dt)
spiketimes = dict.fromkeys(np.arange(N))
for key in spiketimes:
spiketimes[key] = rand(randint(100))
means = np.empty(N)
for i in range(N):
spike_times = spiketimes[i]
datarow = data[i]
if len(spike_times) > 0:
for spike_time in spike_times:
start=max(spike_time-dtbin,0)
end=min(spike_time+dtbin,t)
idx = np.all([times>=start,times<=end],0)
datarow[idx] = np.NaN
means[i] = bottleneck.nanmean(datarow)
向量化内循环是我寻找的wthat。也感谢提示使用convolve为掩码创建间隔。在我的时间里,我从几分钟到一秒之内都有了加速 – 2012-08-10 09:26:01