本文实例讲述了Python使用numpy产生正态分布随机数的向量或矩阵操作。分享给大家供大家参考,具体如下:
简单来说,正态分布(Normal distribution)又名高斯分布(Gaussian distribution),是一个在数学、物理及工程等领域都非常重要的概率分布,在统计学的许多方面有着重大的影响力。一般的正态分布可以通过标准正态分布配合数学期望向量和协方差矩阵得到。如下代码,可以得到满足一维和二维正态分布的样本。
示例1(一维正态分布):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
# coding=utf-8
'''
作者:采石工
来源:知乎
'''
import numpy as np
from numpy.linalg import cholesky
import matplotlib.pyplot as plt
sampleNo = 1000 ;
# 一维正态分布
# 下面三种方式是等效的
mu = 3
sigma = 0.1
np.random.seed( 0 )
s = np.random.normal(mu, sigma, sampleNo )
plt.subplot( 141 )
plt.hist(s, 30 , normed = True )
np.random.seed( 0 )
s = sigma * np.random.randn(sampleNo ) + mu
plt.subplot( 142 )
plt.hist(s, 30 , normed = True )
np.random.seed( 0 )
s = sigma * np.random.standard_normal(sampleNo ) + mu
plt.subplot( 143 )
plt.hist(s, 30 , normed = True )
# 二维正态分布
mu = np.array([[ 1 , 5 ]])
Sigma = np.array([[ 1 , 0.5 ], [ 1.5 , 3 ]])
R = cholesky(Sigma)
s = np.dot(np.random.randn(sampleNo, 2 ), R) + mu
plt.subplot( 144 )
# 注意绘制的是散点图,而不是直方图
plt.plot(s[:, 0 ],s[:, 1 ], '+' )
plt.show()
|
运行结果:
示例2(正态分布):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
#-*- coding:utf-8 -*-
# Python实现正态分布
# 绘制正态分布概率密度函数
import numpy as np
import matplotlib.pyplot as plt
import math
u = 0 # 均值μ
u01 = - 2
sig = math.sqrt( 0.2 ) # 标准差δ
x = np.linspace(u - 3 * sig, u + 3 * sig, 50 )
y_sig = np.exp( - (x - u) * * 2 / ( 2 * sig * * 2 )) / (math.sqrt( 2 * math.pi) * sig)
print x
print "=" * 20
print y_sig
plt.plot(x, y_sig, "r-" , linewidth = 2 )
plt.grid( True )
plt.show()
|
运行结果:
希望本文所述对大家Python程序设计有所帮助。
原文链接:https://www.zhihu.com/question/39823283/answer/115241445