數據是一個包含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