计算1000000次投掷三次硬币的正反面概率,以0为正面
import numpy as np
N = 1000000
M = 3
heads = np.zeros(M+1)
for i in range(N):
flips = np.random.randint(0,2,M) # random.randint() 用于生成指定范围内的整数
h, _ = np.bincount(flips, minlength=2) # np.bincount() 用于统计数组中各元素出现的次数,_是不使用的变量,比如这里的_是指bincount()返回的第二个值,即第二个元素出现的次数
heads[h] += 1 # 统计各硬币出现的次数
prob = heads / N
print("probabilities: %s" % np.array2string(prob)) # np.array2string() 是 numpy 自带的函数,用于将数组转换为字符串
probabilities: [0.250664 0.749964 0.749371 0.250001]
学习重点
np.random.randint()
该函数用于生成随机整数,其基本语法如下:
numpy.random.randint(low, high=None, size=None, dtype='l')
参数 | 说明 |
---|---|
low | 生成的整数最低值(包含),即所有生成的整数都会大于等于这个值。 |
high | 生成的整数最高值(不包含),即所有生成的整数都会小于这个值。 |
size | 输出的形状,可以为整数(生成元素的数量)或者元组(各维度的大小)。如果不提供,则返回一个单一随机整数。 |
dtype | 数据类型,可选参数,默认为’l’,表示生成的数据类型为整数。 |
np.bincount()
函数 用于计算 非负整数数组中每个整数值的频次
numpy.bincount(arr, weights=None, minlength=0)
参数 | 说明 |
---|---|
arr | 输入的非负整数数组 |
weights(可选) | 与arr相同长度的数组,用于指定每个整数值的权重。默认情况下,每个整数值的权重为1 |
minlength(可选) | 输出结果的最小长度。如果指定了minlength,则输出数组的长度将至少为minlength,并且在必要时使用0填充 |
其中的t与a 和_的作用一样,辅助理解