1 泊松分布
首先强推一篇介绍泊松分布的极其优秀的文章:
泊松分布和指数分布:10分钟教程 - 阮一峰的网络日志 (ruanyifeng.com)
我们直接给出泊松分布的概率密度曲线的结果:
下面给出源代码:
# 泊松分布随机数的生成方法
import math
import matplotlib.pyplot as plt
def PoissonDistribution(avg, k):
'''
计算泊松分布概率
:param avg: 泊松分布参数
:param k: 采样值
:return: 采样值对应的发生概率
'''
return (avg**(k)) * (math.exp(-avg)) / math.factorial(k)
def cumsum(a):
'''
计算给定一维数组的累加和
:param a: 一维数组
:return: 累加和构成的列表
'''
cumsum = []
for i in range(0,len(a)):
tmp = 0.0
for j in range(0,i):
tmp += a[j]
cumsum.append(tmp)
return cumsum
if __name__ == '__main__':
poss = [PoissonDistribution(10, i) for i in range(1,50)]
cumsumPoss = cumsum(poss)
plt.bar(range(1,50), poss)
plt.plot(range(1,50), cumsumPoss)
plt.show()
绘制曲线:
生成泊松分布随机数
# 泊松分布随机数的生成方法
import math
import matplotlib.pyplot as plt
import numpy as np
def possVal(avg):
'''
:param avg: 泊松分布参数
:return: 返回泊松分布随机数
'''
poss = [(avg**(k)) * (math.exp(-avg)) / math.factorial(k) for k in range(1, 50)]
cposs = np.concatenate(([0],np.cumsum(a=poss), [1]), axis=0)
rnd = np.random.random()
# print(len(cposs))
for c in range(0, len(cposs)):
if rnd <= cposs[c]:
return c
if __name__ == '__main__':
print(possVal(10))
2 正态分布相加仍是正态分布
import numpy as np
import matplotlib.pyplot as plt
n1 =np.random.normal(loc=2.5,scale=0.3,size=10000)
n2 = np.random.normal(loc=3.5,scale=0.9,size=10000)
n3 = n1 + n2
plt.hist(n3)
plt.show()