Python 中的高效随机 0,1 生成独立概率
Efficient random 0,1 generation of independant probabilities in Python
我有大量相互独立的概率。除了每次在循环中随机调用 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)。
你可以试试这个:
np.where(p > np.random.rand(1000), 1, 0)
np.random.binomial
的 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])
我有大量相互独立的概率。除了每次在循环中随机调用 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)。
你可以试试这个:
np.where(p > np.random.rand(1000), 1, 0)
np.random.binomial
的 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])