使用python模拟高斯分布例子


Posted in Python onDecember 09, 2019

正态分布(Normal distribution),也称“常态分布”,又名高斯分布(Gaussian distribution)

正态曲线呈钟型,两头低,中间高,左右对称因其曲线呈钟形,因此人们又经常称之为钟形曲线。

若随机变量X服从一个数学期望为μ、方差为σ^2的正态分布。其概率密度函数为正态分布的期望值μ决定了其位置,其标准差σ决定了分布的幅度。当μ = 0,σ = 1时的正态分布是标准正态分布。

用python 模拟

#!/usr/bin/python
# -*- coding:utf-8 -*-

import numpy as np
from scipy import stats
import math
import matplotlib as mpl
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
import seaborn


def calc_statistics(x):
  n = x.shape[0] # 样本个数
  # 手动计算
  m = 0
  m2 = 0
  m3 = 0
  m4 = 0
  for t in x:
    m += t
    m2 += t*t
    m3 += t**3
    m4 += t**4
  m /= n
  m2 /= n
  m3 /= n
  m4 /= n

  mu = m
  sigma = np.sqrt(m2 - mu*mu)
  skew = (m3 - 3*mu*m2 + 2*mu**3) / sigma**3
  kurtosis = (m4 - 4*mu*m3 + 6*mu*mu*m2 - 4*mu**3*mu + mu**4) / sigma**4 - 3
  print('手动计算均值、标准差、偏度、峰度:', mu, sigma, skew, kurtosis)

  # 使用系统函数验证
  mu = np.mean(x, axis=0)
  sigma = np.std(x, axis=0)
  skew = stats.skew(x)
  kurtosis = stats.kurtosis(x)
  return mu, sigma, skew, kurtosis


if __name__ == '__main__':
  d = np.random.randn(10000)
  print(d)
  print(d.shape)
  mu, sigma, skew, kurtosis = calc_statistics(d)
  print('函数库计算均值、标准差、偏度、峰度:', mu, sigma, skew, kurtosis)
  # 一维直方图
  mpl.rcParams['font.sans-serif'] = 'SimHei'
  mpl.rcParams['axes.unicode_minus'] = False
  plt.figure(num=1, facecolor='w')
  y1, x1, dummy = plt.hist(d, bins=30, normed=True, color='g', alpha=0.75, edgecolor='k', lw=0.5)
  t = np.arange(x1.min(), x1.max(), 0.05)
  y = np.exp(-t**2 / 2) / math.sqrt(2*math.pi)
  plt.plot(t, y, 'r-', lw=2)
  plt.title('高斯分布,样本个数:%d' % d.shape[0])
  plt.grid(b=True, ls=':', color='#404040')
  # plt.show()

  d = np.random.randn(100000, 2)
  mu, sigma, skew, kurtosis = calc_statistics(d)
  print('函数库计算均值、标准差、偏度、峰度:', mu, sigma, skew, kurtosis)

  # 二维图像
  N = 30
  density, edges = np.histogramdd(d, bins=[N, N])
  print('样本总数:', np.sum(density))
  density /= density.max()
  x = y = np.arange(N)
  print('x = ', x)
  print('y = ', y)
  t = np.meshgrid(x, y)
  print(t)
  fig = plt.figure(facecolor='w')
  ax = fig.add_subplot(111, projection='3d')
  # ax.scatter(t[0], t[1], density, c='r', s=50*density, marker='o', depthshade=True, edgecolor='k')
  ax.plot_surface(t[0], t[1], density, cmap=cm.Accent, rstride=1, cstride=1, alpha=0.9, lw=0.75, edgecolor='k')
  ax.set_xlabel('X')
  ax.set_ylabel('Y')
  ax.set_zlabel('Z')
  plt.title('二元高斯分布,样本个数:%d' % d.shape[0], fontsize=15)
  plt.tight_layout(0.1)
  plt.show()

使用python模拟高斯分布例子

使用python模拟高斯分布例子

来个6的

二元高斯分布方差比较

#!/usr/bin/python
# -*- coding:utf-8 -*-

import numpy as np
from scipy import stats
import matplotlib as mpl
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm


if __name__ == '__main__':
  x1, x2 = np.mgrid[-5:5:51j, -5:5:51j]
  x = np.stack((x1, x2), axis=2)
  print('x1 = \n', x1)
  print('x2 = \n', x2)
  print('x = \n', x)

  mpl.rcParams['axes.unicode_minus'] = False
  mpl.rcParams['font.sans-serif'] = 'SimHei'
  plt.figure(figsize=(9, 8), facecolor='w')
  sigma = (np.identity(2), np.diag((3,3)), np.diag((2,5)), np.array(((2,1), (1,5))))
  for i in np.arange(4):
    ax = plt.subplot(2, 2, i+1, projection='3d')
    norm = stats.multivariate_normal((0, 0), sigma[i])
    y = norm.pdf(x)
    ax.plot_surface(x1, x2, y, cmap=cm.Accent, rstride=1, cstride=1, alpha=0.9, lw=0.3, edgecolor='#303030')
    ax.set_xlabel('X')
    ax.set_ylabel('Y')
    ax.set_zlabel('Z')
  plt.suptitle('二元高斯分布方差比较', fontsize=18)
  plt.tight_layout(1.5)
  plt.show()

使用python模拟高斯分布例子

图像好看吗?

以上这篇使用python模拟高斯分布例子就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现定时播放mp3
Mar 29 Python
Python 3.x 新特性及10大变化
Jun 12 Python
在Python的Flask中使用WTForms表单框架的基础教程
Jun 07 Python
Python入门_浅谈逻辑判断与运算符
May 16 Python
详解Python核心编程中的浅拷贝与深拷贝
Jan 07 Python
python线程池threadpool实现篇
Apr 27 Python
Python给定一个句子倒序输出单词以及字母的方法
Dec 20 Python
Python实现简易过滤删除数字的方法小结
Jan 09 Python
在matplotlib中改变figure的布局和大小实例
Apr 23 Python
Python爬虫教程之利用正则表达式匹配网页内容
Dec 08 Python
pytorch实现加载保存查看checkpoint文件
Jul 15 Python
python自动获取微信公众号最新文章的实现代码
Jul 15 Python
使用python+whoosh实现全文检索
Dec 09 #Python
Python 实现顺序高斯消元法示例
Dec 09 #Python
Python实现线性判别分析(LDA)的MATLAB方式
Dec 09 #Python
在python中做正态性检验示例
Dec 09 #Python
python实现高斯判别分析算法的例子
Dec 09 #Python
Pycharm使用远程linux服务器conda/python环境在本地运行的方法(图解))
Dec 09 #Python
使用 Python 写一个简易的抽奖程序
Dec 08 #Python
You might like
php入门之连接mysql数据库的一个类
2012/04/21 PHP
php中使用exec,system等函数调用系统命令的方法(不建议使用,可导致安全问题)
2012/09/07 PHP
PHP之sprintf函数用法详解
2014/11/12 PHP
PHP使用JSON和将json还原成数组
2015/02/12 PHP
PHP date函数常用时间处理方法
2015/05/11 PHP
php中preg_replace正则替换用法分析【一次替换多个值】
2017/01/17 PHP
js压缩利器
2007/02/20 Javascript
javaScript checkbox 全选/反选及批量删除
2010/04/28 Javascript
Javascript的getYear、getFullYear、getUTCFullYear异同分享
2011/11/30 Javascript
js判断字符长度以及中英文数字等
2013/12/31 Javascript
js使用循环清空某个div中的input标签值
2014/09/29 Javascript
Vue.js动态组件解析
2016/09/09 Javascript
JS中使用正则表达式g模式和非g模式的区别
2017/04/01 Javascript
Vue项目使用localStorage+Vuex保存用户登录信息
2019/05/27 Javascript
微信小程序实现拖拽功能
2019/09/26 Javascript
Layer UI表格列日期格式化及取消自动填充日期的实现方法
2020/05/10 Javascript
Electron 打包问题:electron-builder 下载各种依赖出错(推荐)
2020/07/09 Javascript
在Python中处理XML的教程
2015/04/29 Python
Django中实现点击图片链接强制直接下载的方法
2015/05/14 Python
使用Python的Django框架结合jQuery实现AJAX购物车页面
2016/04/11 Python
Python正则表达式和元字符详解
2018/11/29 Python
python简单鼠标自动点击某区域的实例
2019/06/25 Python
python多线程并发实例及其优化
2019/06/27 Python
django 数据库连接模块解析及简单长连接改造方法
2019/08/29 Python
python+gdal+遥感图像拼接(mosaic)的实例
2020/03/10 Python
解决Jupyter notebook更换主题工具栏被隐藏及添加目录生成插件问题
2020/04/20 Python
pycharm Tab键设置成4个空格的操作
2021/02/26 Python
Fashion Eyewear美国:英国线上设计师眼镜和太阳镜的零售商
2016/08/15 全球购物
Tripadvisor新西兰:阅读评论,比较价格和酒店预订
2018/02/10 全球购物
自我鉴定三原则
2014/01/13 职场文书
售后求职信范文
2014/03/15 职场文书
户籍证明模板
2014/09/28 职场文书
大学毕业生自我鉴定范文
2019/06/21 职场文书
升职感谢领导的话语及升职感谢信
2019/06/24 职场文书
详解nginx安装过程并代理下载服务器文件
2022/02/12 Servers
tomcat默认最大连接数及相关调整方法
2022/05/06 Servers