python - 将直方图函数扩展到重叠的箱和具有任意间隙的箱?

标签 python numpy neuroscience

是否有一个直方图函数可以处理任何通用的 bin?

在我的神经科学应用程序中,我有两个一维数组:spikestime_centers和一个参数time_window 。我的目标是输出名为 firing_rate 的数组与 time_centers 大小相同,定义为firing_rate[i]=len(abs(spikes-time_centers[i])<time_window) ,以便计算每个 time_center 附近的尖峰数量bin 的宽度区间 time_window .

我很快起草了一个函数,但我有点担心性能,因为我需要处理大量的尖峰序列。

def fr(spikes,time_bins,time_window):
    rate=np.zeros(time_bins.size)
    for i,t in enumerate(time_bins):
        rate[i]= sum(np.abs(spikes-t)<time_window)
    return rate

是否可以利用spikes这一事实数组已排序? 即使我使用相同大小的垃圾箱 ( time_window ),我的垃圾箱也可能重叠,或者垃圾箱之间可能存在可变间隙。

通常spikes包含 ~ 1000 个元素,time_centers ~ 50 个 bin,我需要为每个 session 计算 30000 个神经元。

最佳答案

我们可以使用 np.searchsorted 的排序性质-

idx1 = np.searchsorted(spikes,time_bins-time_window,'right')
idx2 = np.searchsorted(spikes,time_bins+time_window,'left')
rate = idx2-idx1

或者,对 time_bins 进行一次 searchsorted,使其在 spikes 的限制内 -

T = np.r_[time_bins-time_window,time_bins+time_window]
n = len(time_bins)
idxx = np.searchsorted(spikes,T,'left')
idx1 = idxx[:n] + (time_bins-spikes[idxx[:n]]>=time_window)
idx2 = idxx[n:]

关于python - 将直方图函数扩展到重叠的箱和具有任意间隙的箱?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57631469/

相关文章:

python - 嵌套字典的下键和合并数据(如果下键已经存在)

python - 如何使用 psycopg2/python 处理这个驼峰式 postgreSQL 查询?

python - 区域提案标准化的最快算法

python - 使用索引数组对多维 numpy 数组进行索引

python-3.x - python中Eye-Tracking数据分析(Eye-link)

python - 如何检测 OpenCV 中的线条?

python - 使用 python 修复 JSON 结构

python - Pandas 根据其他列的值创建新列/逐行应用多列的函数

调试 NEURON MOD 文件?

python - 寻找线性循环网络的稳态输出