如何实现由U[0,1]到N(0,1)

1,工程上的做法有:同时运行n个这样的伪随机数程序,每步产生n个随机数,那么这n个数的和就近似服从正态分布了。

from matplotlib import pyplot as plt
import random
from tqdm import tqdm

n = 20000
result = [] #记录取值

'''n个均匀分布同时取值n次并求和'''
for i in tqdm(range(n)):
    middle = []
    for j in range(n):
        middle.append(random.random())
    result.append(sum(middle))
print(result)

'''统计在长度为1的区间内的频数'''
distribution = [0] * n
for number in result:
    index = int(number)
    distribution[index] += 1
'''由频数到频率'''
distribution = list(map(lambda x: x/len(distribution), distribution))

'''求均值'''
mean = sum(result) / len(result)
'''求方差'''
variance = pow(sum(list(map(lambda x: pow(x-mean, 2), result)))/len(result), 1/2)
'''正态分布归一化'''
xList = list(map(lambda x: (x-mean)/variance, range(n)))

print(mean)
print(variance)
print(list(range(n)))

plt.plot(xList[int(0.45*n):int(0.55*n)], distribution[int(0.45*n):int(0.55*n)])
plt.show()

2,神经网络(这就是神经网络时代的哲学:难算的我们都用神经网络来拟合)

posted @ 2021-04-26 22:57  tensor_zhang  阅读(201)  评论(0编辑  收藏  举报