如何解决有没有一种有效的方法可以在 numpy 数组中创建 N 次伯努利试验的二项式实验?
假设我有一枚硬币,其正面朝上的概率为 P。要进行的实验是继续抛硬币 x 次。这个实验要重复1000次。
问题是否有一种高效/矢量化的方法来生成随机 1(概率为 P)和 0(概率为 1-P)的数组?
如果我尝试这样的事情:
np.full(10,rng().choice((0,1),p= [.3,.7]))
整个数组都填充了相同的选择。我见过涉及固定的 0 与 1 比率的解决方案。
a = np.ones(n+m)
a[:m] = 0
np.random.shuffle(a)
但是,我不确定如何通过这种设置来保持实验的随机性。
目前我只是按如下方式循环遍历每次迭代,但是一旦实验数量变大,它就会非常慢。
(实际实验涉及在两个连续的头被翻转时终止每次试验,这就是代码中存在 while 循环的原因。为了使问题具体化,我不想在这里解决这个问题。)
>Set = [0,1]
T = np.ones(Episodes)
for i in range(Episodes):
a = rng().choice(Set,p=[(1 - p),p])
counter = 1
while True:
b = rng().choice(Set,p=[(1-p),p])
counter += 1
if (a == 1) & (b == 1):
break
a = b
T[i] = counter
如有任何见解,将不胜感激,谢谢!
解决方法
@Quang Hong 和@Kevin 提供的答案如以上评论中所列。只需使用 default_rng() 重新发布,以便以后更容易参考。但他们才是真正的英雄。
from numpy import default_rng as rng
rng().binomial(1,p = .7,size=(10,10))
rng().choice((0,1),p = [.3,.7],10))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。