使用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 29 Python
Python中死锁的形成示例及死锁情况的防止
Jun 14 Python
R vs. Python 数据分析中谁与争锋?
Oct 18 Python
python利用有道翻译实现"语言翻译器"的功能实例
Nov 14 Python
matplotlib中legend位置调整解析
Dec 19 Python
python web基础之加载静态文件实例
Mar 20 Python
Python线程下使用锁的技巧分享
Sep 13 Python
Python http接口自动化测试框架实现方法示例
Dec 06 Python
python根据文章标题内容自动生成摘要的实例
Feb 21 Python
pyinstaller打包opencv和numpy程序运行错误解决
Aug 16 Python
Python生成并下载文件后端代码实例
Aug 31 Python
Elasticsearch 聚合查询和排序
Apr 19 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
使用sockets:从新闻组中获取文章(三)
2006/10/09 PHP
简单的过滤字符串中的HTML标记
2006/12/25 PHP
深入PHP与浏览器缓存的分析
2013/06/03 PHP
destoon二次开发入门示例
2014/06/20 PHP
javascript Object与Function使用
2010/01/11 Javascript
location.href语句与火狐不兼容的问题
2010/07/04 Javascript
IE6下出现JavaScript未结束的字符串常量错误的解决方法
2010/11/21 Javascript
对之前写的jquery分页做下升级
2014/06/19 Javascript
深入理解JavaScript系列(40):设计模式之组合模式详解
2015/03/04 Javascript
深入理解JavaScript系列(41):设计模式之模板方法详解
2015/03/04 Javascript
jQuery对象与DOM对象转换方法详解
2016/05/10 Javascript
jQuery UI Bootstrap是什么?
2016/06/17 Javascript
jquery实现文本框的禁用和启用
2016/12/07 Javascript
AngularJs篇:使用AngularJs打造一个简易权限系统的实现代码
2016/12/26 Javascript
JavaScript登录记住密码操作(超简单代码)
2017/03/22 Javascript
addEventListener()与removeEventListener()解析
2017/04/20 Javascript
javascript自定义日期比较函数用法示例
2019/07/22 Javascript
vue项目引入ts步骤(小结)
2019/10/31 Javascript
python中的一些类型转换函数小结
2013/02/10 Python
详解python中的线程
2018/02/10 Python
python动态视频下载器的实现方法
2019/09/16 Python
python库matplotlib绘制坐标图
2019/10/18 Python
python模拟哔哩哔哩滑块登入验证的实现
2020/04/24 Python
Python 远程开关机的方法
2020/11/18 Python
Python ellipsis 的用法详解
2020/11/20 Python
网络、C以及其他硬件方面的面试题
2016/08/23 面试题
Overload和Override的区别
2012/09/02 面试题
大学生学业生涯规划
2014/01/05 职场文书
酒店经理职责
2014/01/30 职场文书
2014年五四青年节活动方案
2014/03/29 职场文书
教师爱岗敬业演讲稿
2014/05/05 职场文书
计算机专业求职信
2014/06/02 职场文书
主题团日活动总结
2014/06/25 职场文书
乡镇领导干部个人对照检查材料思想汇报
2014/09/23 职场文书
2014年公务员退休工资改革方案
2014/10/01 职场文书
工厂无线对讲系统解决方案
2022/02/18 无线电