使用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的Urllib库的一些高级用法
Apr 30 Python
Python 遍历列表里面序号和值的方法(三种)
Feb 17 Python
使用python遍历指定城市的一周气温
Mar 31 Python
Python 绘图库 Matplotlib 入门教程
Apr 19 Python
解决PyCharm import torch包失败的问题
Oct 13 Python
树莓派使用USB摄像头和motion实现监控
Jun 22 Python
Python 函数list&read&seek详解
Aug 28 Python
python getpass实现密文实例详解
Sep 24 Python
django 解决model中类写不到数据库中,数据库无此字段的问题
May 20 Python
基于opencv的selenium滑动验证码的实现
Jul 24 Python
python 下载文件的几种方法汇总
Jan 06 Python
PyCharm+Miniconda3安装配置教程详解
Feb 16 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中通过HTTP_USER_AGENT判断是否为手机移动终端的函数代码
2013/02/14 PHP
PHP进程同步代码实例
2015/02/12 PHP
详解php设置session(过期、失效、有效期)
2015/11/12 PHP
php版微信公众平台之微信网页登陆授权示例
2016/09/23 PHP
Win7环境下Apache连接MySQL提示连接已重置的解决办法
2017/05/09 PHP
PHP十六进制颜色随机生成器功能示例
2017/07/24 PHP
JS 如何获取radio选中后的值及不选择取radio的值
2013/10/28 Javascript
Jquery AJAX POST与GET之间的区别
2013/11/14 Javascript
javascript向后台传送相同属性的参数即数组参数
2014/02/17 Javascript
AngularJS基础知识笔记之表格
2015/05/10 Javascript
jQuery鼠标事件汇总
2015/08/30 Javascript
基于jquery实现省市联动效果
2015/11/23 Javascript
js仿微博实现统计字符和本地存储功能
2015/12/22 Javascript
Bootstrap开发实战之响应式轮播图
2016/06/02 Javascript
每日十条JavaScript经验技巧(二)
2016/06/23 Javascript
jQuery弹出div层过2秒自动消失
2016/11/29 Javascript
基于AngularJS实现的工资计算器实例
2017/06/16 Javascript
解决Vue 刷新页面导航显示高亮位置不对问题
2019/12/25 Javascript
[08:07]DOTA2每周TOP10 精彩击杀集锦vol.8
2014/06/25 DOTA
python基础之入门必看操作
2017/07/26 Python
Python绘制七段数码管实例代码
2017/12/20 Python
python 实现求解字符串集的最长公共前缀方法
2018/07/20 Python
解决PyCharm不运行脚本,而是运行单元测试的问题
2019/01/17 Python
python 类的继承 实例方法.静态方法.类方法的代码解析
2019/08/23 Python
django-rest-swagger对API接口注释的方法
2019/08/29 Python
python程序中的线程操作 concurrent模块使用详解
2019/09/23 Python
python代码如何注释
2020/06/01 Python
农药学硕士毕业生自荐信
2013/09/25 职场文书
信息技术毕业生自荐信范文
2014/03/13 职场文书
产品质量承诺书范文
2014/03/27 职场文书
行政专员岗位职责说明书
2014/07/30 职场文书
缅怀先烈演讲稿
2014/09/03 职场文书
行政工作试用期自我评价
2014/09/14 职场文书
企业党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
优化经济发展环境工作总结
2015/08/11 职场文书
2016婚礼主持词开场白
2015/11/24 职场文书