如何在Python中生成具有泊松分布的1,0的数组

时间:2019-07-08 18:10:23

标签: python numpy

我需要生成具有泊松分布的峰值序列,其功能为np.random.poisson()。 但在最简单的解释中,我如何生成0,1的数组,即1的数量为3,但数组的大小应为[1,7]

这意味着:a=[1,0,1,0,1,0,0]....只能使用泊松函数在该数组中分配数字1。

我非常困在这个问题上

2 个答案:

答案 0 :(得分:0)

感谢this link使用@ Z4层。在第5页的底部,有一个标题为“生成Poisson Spike火车”的部分开始。

这是一种可能的解决方案:

"""Generate a spike train. See page 5 and 6 here:
https://www.cns.nyu.edu/~david/handouts/poisson.pdf

This will use the first method described.
"""
import numpy as np
# Seed the generator for consistent results.
np.random.seed(42)

# We need to start with some sort of r(t). Presumably the asker of this
# question has access to this.
r = np.array([100, 500, 600, 700, 300, 200, 900])

# Define our time interval, delta t. Use one millisecond as suggested
# in the paper.
dt = 0.001

# Draw 7 random numbers on the interval [0, 1)
x = np.random.rand(7)

# Initialize output.
spikes = np.zeros_like(r)

# If x[i] <= r * dt, generate a spike.
mask = x <= r * dt

# Set to 1.
spikes[mask] = 1

print(spikes)

输出:

[0 0 0 1 1 1 1]

否,这不会产生3个尖峰。考虑到我对论文的理解,固定峰值的数量不合适。

答案 1 :(得分:0)

我会尝试定义黑条(如在神经元编码中使用的尖峰序列中所见),这使您限制了函数共域的限制,其中bins是您的7个元素的长度

    import numpy as np


    def black_bars(expectation, bins):
        poisson = np.random.poisson(expectation, bins)
        bounded_poisson = np.clip(poisson, a_min=0, a_max=1)

        print('original -> {0}'.format(poisson))
        print('bounded -> {0}'.format(bounded_poisson))


    black_bars(.5, 7)

输出

    original -> [0 1 2 0 1 3 2]
    bounded -> [0 1 1 0 1 1 1]