данные представляют собой матрицу, содержащую 2500 временных рядов измерения. Мне нужно усреднять каждый временной ряд с течением времени, отбрасывая точки данных, которые были записаны вокруг всплеска (в интервале tspike-dt*10... tspike+10*dt). Количество спайков является переменным для каждого нейрона и хранится в словаре с 2500 записями. Мой текущий код выполняет итерацию по нейронам и временам спайков и устанавливает замаскированные значения в NaN. Затем вызывается Bottleneck.nanmean(). Однако этот код работает медленно в текущей версии, и мне интересно, есть ли более быстрое решение. Спасибо!
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)