Python中有效的随机0,1代独立概率

时间:2018-05-07 20:37:28

标签: python numpy probability

我有很多彼此独立的概率。除了每次在循环中调用numpy随机数之外,是否有一种基于这些概率生成0或1的有效方法?我每次只需要一次试验的结果,但是对于每个概率。

# current method using np.random.binomial()
n = 1
p = np.random.random(1000) #generating 1000 probabilities

results = np.zeros(1000)
for ix, i in enumerate(p):
    results[ix] = np.random.binomial(n,i,1)

是否有更快的方式或函数可以采用独立的概率集(因此不是随机选择,因为概率不会增加到1)。

2 个答案:

答案 0 :(得分:5)

p p参数允许列表类似,当它是这样时,它代表每个样本的p值。此外,当像这样使用列表时,您甚至不需要提供您期望的总样本数量:您只需为results = np.random.binomial(n, p) 中的每个值获得一个。

In [1]: np.random.binomial(1, 0.5)
Out[1]: 1

In [2]: np.random.binomial(1, [0.5, 0.5, 0.9])
Out[2]: array([0, 0, 1])

一些样本证明了这一点:

alias-declaration:
    using identifier attribute-specifier-seq = defining-type-id ;

答案 1 :(得分:1)

你可以试试这个:

np.where(p > np.random.rand(1000), 1, 0)