У меня есть вектор периодов спайка (потенциалы действия от нейрона) и вектор временных меток события стимула. Я хочу создать PSTH, чтобы увидеть, влияет ли стимул на скорость всплеска нейрона. Я могу сделать это, перейдя через каждое событие стимула (см. Простой пример ниже), но это очень медленно для длительных экспериментов, где происходит более 30 000 событий стимула и регистрируется много нейронов.Векторизованный подход к вычислению PSTH (гистограмма времени перистимула) в MATLAB
Как это можно сделать без петель?
Пример медленного пути:
% set variables
spikeTimes = [0.9 1.1 1.2 2.5 2.8 3.1];
stimTimes = [1 2 3 4 5];
preStimTime = 0.2;
postStimTime = 0.3;
for iStim = 1:length(stimTimes)
% find spikes within time window
inds = find((spikeTimes > (stimTimes(iStim) - preStimTime)) & (spikeTimes < (stimTimes(iStim) + postStimTime)));
% align spike times to stimulus onset
stimONtimes = spikeTimes(inds) - stimTimes(iStim);
% store times in array for plotting
PSTH_array(iStim,1:length(stimONtimes)) = stimONtimes;
end
Возможно, вам придется рассказать нам, что делает PSTH. В обычной гистограмме вам нужны только подсчеты для каждого бункера, но в вашем случае кажется, что вы помещаете отдельные значения в каждый бит. Это то, что вы хотите? – beaker
@beaker Я не помещаю значения в бункеры в примере кода, я просто сохраняю время всплеска, которое произошло в определенное временное окно для каждого представления стимула. Это то, что я хочу оптимизировать. Затем можно сделать гистограмму с использованием этого массива и определить временные ячейки любого размера. – raz
А, я вижу. Это позор, потому что было бы проще сделать сумму или счет или что-то еще. (Или, по крайней мере, я вижу способ сделать это более непосредственно.) Тем не менее, описание было бы весьма желанным. – beaker