【发布时间】:2016-08-14 11:29:00
【问题描述】:
我有一个尖峰时间向量(来自神经元的动作电位)和一个刺激事件时间戳向量。我想创建一个 PSTH 来查看刺激是否会影响神经元的尖峰率。我可以通过循环遍历每个刺激事件来做到这一点(参见下面的简单示例),但是对于有超过 30,000 个刺激事件并且正在记录许多神经元的长时间实验来说,这非常慢。
没有for循环怎么办?
慢路示例:
% 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 我没有将值放入示例代码中的 bin 中,我只是存储每个刺激呈现的定义时间窗口中发生的尖峰时间。这就是我要优化的。然后可以使用该数组制作直方图并定义任意大小的时间箱。
-
啊,我明白了。这是一种耻辱,因为它会更容易进行总和或计数或其他任何事情。 (或者,至少,我可以找到一种更直接的方法。)尽管如此,还是很受欢迎的。
-
@beaker 你会如何使用 sum 或 count 呢?我肯定想知道怎么问有多少尖峰时间在0.8和1.3之间,有多少尖峰时间在1.8和2.3之间,没有循环。输出应该是 3 和 0,并且应该以某种方式存储。如果您对应用程序感兴趣,这里是 PSTH 的参考en.wikipedia.org/wiki/Peristimulus_time_histogram
-
好吧,你可以试试
histogram或discretize并通过 bin 边缘,但我不确定当 bin 重叠时它们会做什么。
标签: matlab vectorization neuroscience