使用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实现的数据结构与算法之快速排序详解
Apr 22 Python
Python中类的定义、继承及使用对象实例详解
Apr 30 Python
git使用.gitignore设置不生效或不起作用问题的解决方法
Jun 01 Python
使用python3构建文件传输的方法
Feb 13 Python
python学生管理系统学习笔记
Mar 19 Python
pandas取出重复数据的方法
Jul 04 Python
如何安装并使用conda指令管理python环境
Jul 10 Python
django2笔记之路由path语法的实现
Jul 17 Python
Python基于WordCloud制作词云图
Nov 29 Python
如何理解Python中包的引入
May 29 Python
详解Django中的FBV和CBV对比分析
Mar 01 Python
python pygame入门教程
Jun 01 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
通过curl模拟post和get方式提交的表单类
2014/04/23 PHP
php实现登陆模块功能示例
2016/10/20 PHP
PHP计算近1年的所有月份
2017/03/13 PHP
yii 2.0中表单小部件的使用方法示例
2017/05/23 PHP
Jquery中getJSON在asp.net中的使用说明
2011/03/10 Javascript
7款吸引人眼球的jQuery/CSS3特效实例分享
2013/04/25 Javascript
AngularJS入门教程之Hello World!
2014/12/06 Javascript
jquery控制页面部分刷新的方法
2015/06/24 Javascript
百度地图api如何使用
2015/08/03 Javascript
javascript性能优化之事件委托实例详解
2015/12/12 Javascript
简单实现JS倒计时效果
2016/12/23 Javascript
requirejs + vue 项目搭建详解
2017/06/16 Javascript
妙用Angularjs实现表格按指定列排序
2017/06/23 Javascript
Easy UI动态树点击文字实现展开关闭功能
2017/09/30 Javascript
vuex 使用文档小结篇
2018/01/11 Javascript
Vue中的异步组件函数实现代码
2018/07/20 Javascript
详解JWT token心得与使用实例
2019/08/02 Javascript
NodeJS 文件夹拷贝以及删除功能
2019/09/03 NodeJs
详解JavaScript 事件流
2020/09/02 Javascript
vue自定义树状结构图的实现方法
2020/10/18 Javascript
vue使用video插件vue-video-player详解
2020/10/23 Javascript
js 实现碰撞检测的示例
2020/10/28 Javascript
vue element实现表格合并行数据
2020/11/30 Vue.js
浅谈python for循环的巧妙运用(迭代、列表生成式)
2017/09/26 Python
numpy.linspace 生成等差数组的方法
2018/07/02 Python
详解python执行shell脚本创建用户及相关操作
2019/04/11 Python
Django将默认的SQLite更换为MySQL的实现
2019/11/18 Python
python实现银行账户系统
2021/02/22 Python
用CSS3实现无限循环的无缝滚动的示例代码
2017/11/01 HTML / CSS
旅游个人求职信范文
2014/01/30 职场文书
师德学习感言
2014/01/31 职场文书
教师节活动主持词
2014/04/02 职场文书
2014年教师节演讲稿
2014/09/03 职场文书
乡镇党的群众路线教育实践活动总结报告
2014/10/30 职场文书
汽车销售合同文本
2019/08/08 职场文书
深入理解MySQL中MVCC与BufferPool缓存机制
2022/05/25 MySQL