numpy.random.seed(seed=None)
用于指定随机数生成时所用算法开始的整数值,如果使用相同的 seed() 值,则每次生成的随机数都相同,如果不设置这个值,则系统根据时间来自己选择这个值,此时每次生成的随机数因时间差异而不同。
二项分布(binomial)
野外正在进行9(n=9)口石油勘探井的发掘工作,每一口井能够开发出油的概率是
0.1(p=0.1)。请问,最终所有的勘探井都勘探失败的概率?
0.9^9=0.387420489
np.random.seed(20201124)
n = 9
p = 0.1
size = 50000
x = np.random.binomial(n, p, size)
print(np.sum(x == 0) / size) # 0.3897
plt.hist(x)
plt.show()
s = stats.binom.pmf(range(10), n, p)
print(np.around(s, 3))
泊松分布(poisson)
假定某航空公司预定票处平均每小时接到42次订票电话,那么10分钟内恰好接到6次电话的概
率是多少?
lam = 42 / 6
size = 50000
x = np.random.poisson(lam, size)
print(np.sum(x == 6) / size)
plt.hist(x)
plt.show()
x = stats.poisson.pmf(6, lam)
print(x)
0.14900277967433773
超几何分布(hypergeometric)
一共20只动物里有7只是狗,抽取12只有3只狗的概率(无放回抽样)。
x = np.random.hypergeometric(ngood=7, nbad=13, nsample=12, size=size)
print(np.sum(x == 3) / size) # 0.198664
plt.hist(x, bins=8)
plt.show()
x = range(8)
s = stats.hypergeom.pmf(k=x, M=20, n=7, N=12)
print(np.round(s, 3))
[0. 0.004 0.048 0.199 0.358 0.286 0.095 0.01 ]
均匀分布(uniform)
a = 0
b = 100
size = 50000
x = np.random.uniform(a, b, size=size)
print(np.all(x >= 0))
print(np.all(x < 100))
y = (np.sum(x < 50) - np.sum(x < 10)) / size
print(y)
plt.hist(x, bins=20)
plt.show()
a = stats.uniform.cdf(10, 0, 100)
b = stats.uniform.cdf(50, 0, 100)
print(b - a)
True
True
0.4018
0.4
分配基本均匀
正态分布(randn)
np.random.seed(20200614)
size = 50000
x = np.random.randn(size)
plt.hist(x, bins=20)
plt.show()
指数分布(exponential)
np.random.seed(20200614)
lam = 7
size = 50000
x = np.random.exponential(1 / lam, size)
plt.hist(x, bins=20)
plt.show()