utils.py 文件源码

python
阅读 19 收藏 0 点赞 0 评论 0

项目:nept 作者: vandermeerlab 项目源码 文件源码
def bin_spikes(spikes, position, window_size, window_advance,
               gaussian_std=None, n_gaussian_std=5, normalized=True):
    """Bins spikes using a sliding window.

    Parameters
    ----------
    spikes: list
        Of nept.SpikeTrain
    position: nept.AnalogSignal
    window_size: float
    window_advance: float
    gaussian_std: float or None
    n_gaussian_std: int
    normalized: boolean

    Returns
    -------
    binned_spikes: nept.AnalogSignal

    """
    bin_edges = get_edges(position, window_advance, lastbin=True)

    given_n_bins = window_size / window_advance
    n_bins = int(round(given_n_bins))
    if abs(n_bins - given_n_bins) > 0.01:
        warnings.warn("window advance does not divide the window size evenly. "
                      "Using window size %g instead." % (n_bins*window_advance))

    if normalized:
        square_filter = np.ones(n_bins) * (1 / n_bins)
    else:
        square_filter = np.ones(n_bins)

    counts = np.zeros((len(spikes), len(bin_edges)))
    for idx, spiketrain in enumerate(spikes):
        counts[idx] = np.convolve(np.hstack([np.histogram(spiketrain.time, bins=bin_edges)[0],
                                             np.array([0])]),
                                  square_filter, mode='same')

    if gaussian_std is not None and gaussian_std > window_advance:
        n_points = n_gaussian_std * gaussian_std * 2 / window_advance
        n_points = max(n_points, 1.0)
        if n_points % 2 == 0:
            n_points += 1
        n_points = int(round(n_points))
        gaussian_filter = signal.gaussian(n_points, gaussian_std / window_advance)
        gaussian_filter /= np.sum(gaussian_filter)

        if len(gaussian_filter) < counts.shape[1]:
            for idx, spiketrain in enumerate(spikes):
                counts[idx] = np.convolve(counts[idx], gaussian_filter, mode='same')
        else:
            raise ValueError("gaussian filter too long for this length of time")

    return nept.AnalogSignal(counts.T, bin_edges)
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号