numpy中np.random.binomial函数工作原理及参数用法疑问
关于numpy.random.binomial的两个问题解答
第一个代码是否满足你的需求?
你写的代码:
print(np.random.binomial(n = 1, [0.1,0.9]))
这里numpy会把第二个未命名参数识别为p。这段代码实际是做两次独立的伯努利试验(n=1的二项分布就是伯努利分布):
- 第一次试验:成功概率0.1,输出0(失败)或1(成功)
- 第二次试验:成功概率0.9,输出0或1
所以输出是一个长度为2的数组(比如[0, 1]),并不是单个符合“1出现概率10%、0出现概率90%”的值。
如果要生成单个满足需求的值,应该写成:
print(np.random.binomial(n=1, p=0.1))
每次运行这个代码,会输出0或1,其中1的出现概率是10%,0是90%。
第二个代码的分布与可能结果
代码:
print(np.random.binomial(n = 2, p = [0.1,0.5,0.4]))
这里p是包含3个概率值的数组,numpy会针对每个p值独立执行一次n=2的二项试验,最终输出一个长度为3的数组,每个元素对应一次试验的结果:
- 每个n=2的二项试验,代表做2次独立的伯努利试验,统计成功的次数,所以每个试验的可能结果确实是0、1、2
- 三个试验各自的概率分布如下:
- p=0.1时:P(0)=0.9²=0.81,P(1)=2×0.1×0.9=0.18,P(2)=0.1²=0.01
- p=0.5时:P(0)=0.5²=0.25,P(1)=2×0.5×0.5=0.5,P(2)=0.5²=0.25
- p=0.4时:P(0)=0.6²=0.36,P(1)=2×0.4×0.6=0.48,P(2)=0.4²=0.16
举个例子,运行一次可能得到[0, 1, 2],三个元素分别对应三次试验的成功次数。
内容的提问来源于stack exchange,提问作者Eisen
相关产品推荐
相关产品推荐

