我有很多彼此独立的概率。除了每次在循环中调用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)。
答案 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)