在MATLAB中计算PSTH(蠕动时间直方图)的矢量化方法

一次

我有一个尖峰时间向量(来自神经元的动作电位)和一个刺激事件时间戳记向量。我想创建一个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
烧杯

最好的方法是仅使用现有的直方图函数。它们的速度非常快,可以为您提供所需的所有信息。当然,这假定垃圾箱不重叠。给定您的示例数据:

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;

您可以像这样构造垃圾箱:

bins = sort([stimTimes - preStimTime, stimTimes + postStimTime])

或者

bins = [stimTimes - preStimTime; stimTimes + postStimTime];
bins = bins(:).'

bins =
   0.80000   1.30000   1.80000   2.30000   2.80000   3.30000   3.80000   4.30000   4.80000   5.30000

然后,可以根据需要的结果以及所用的MATLAB版本来使用histcounts,,discretizehistc我将使用histc(因为我没有所有花哨的东西),但是所有三个函数的输入都相同。您有一个额外的输出histcountsedges对我们没有用),而有一个额外的输出discretize(对实际计数)。

[N, IDX] = histc(spikeTimes, bins)

N =    
   3   0   0   1   2   0   0   0   0   0

IDX =    
   1   1   1   4   5   5

由于垃圾箱包括之间的时间,(T(i) + postStimTime)因此(T(i+1) - preStimTime)我们需要使用其他所有垃圾箱:

N = N(1:2:end)

N =
   3   0   2   0   0

同样,我们只对奇数时隙中发生的尖峰感兴趣,我们需要调整索引以匹配新的IDX

v = mod(IDX, 2)

v =
   1   1   1   0   1   1

IDX = ((IDX+1)/2).*v

IDX =
   1   1   1   0   3   3

结果与我们最初得到的结果一致:1号仓中有3个尖峰,3号仓中有2个尖峰。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在MATLAB中计算PSTH(蠕动时间直方图)的矢量化方法

来自分类Dev

在MATLAB中计算x,x。^ 2,... x。^ K(幂矢量化,几何级数)

来自分类Dev

Matlab效率-矢量化

来自分类Dev

MATLAB bsxfun或矢量化

来自分类Dev

Matlab效率-矢量化

来自分类Dev

Matlab矢量化的for循环

来自分类Dev

Matlab矢量化矢量创建

来自分类Dev

Matlab矢量化矢量创建

来自分类Dev

数组计算的矢量化版本

来自分类Dev

成分方差的矢量化计算

来自分类Dev

列表的 numpy 范围(矢量化计算)

来自分类Dev

Matlab创建矢量化序列

来自分类Dev

MATLAB / Octave循环的矢量化

来自分类Dev

矢量化代码比循环慢?的MATLAB

来自分类Dev

自相关MATLAB循环的矢量化

来自分类Dev

用Matlab进行矢量化编程

来自分类Dev

尝试对以下内容进行矢量化以提高时间效率MATLAB

来自分类Dev

矢量化的新事件计数方法

来自分类Dev

在MATLAB中计算量化误差

来自分类Dev

有一种矢量化的方法来计算sympy中的梯度吗?

来自分类Dev

向多指标的子索引添加计算行的矢量化方法

来自分类Dev

广义二项式定理分子计算的矢量化方法?

来自分类Dev

MATLAB:在两个矩阵上应用函数的有效(矢量化)方法?

来自分类Dev

寻找一种在 Matlab 中矢量化 find 命令的方法

来自分类Dev

numpy矢量化

来自分类Dev

熊猫矢量化

来自分类Dev

矢量化算法

来自分类Dev

矢量化列表

来自分类Dev

矢量化熊猫数据系列的标准差计算