使用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引用类型和值类型的区别与使用解析
Oct 17 Python
对Python 文件夹遍历和文件查找的实例讲解
Apr 26 Python
解决Pycharm调用Turtle时 窗口一闪而过的问题
Feb 16 Python
python使用time、datetime返回工作日列表实例代码
May 09 Python
python爬虫的一个常见简单js反爬详解
Jul 09 Python
在Python中获取操作系统的进程信息
Aug 27 Python
Series和DataFrame使用简单入门
Nov 13 Python
python的time模块和datetime模块实例解析
Nov 29 Python
Tensorflow的常用矩阵生成方式
Jan 04 Python
Python Django2 model 查询介绍(条件、范围、模糊查询)
Mar 16 Python
Django视图、传参和forms验证操作
Jul 15 Python
浏览器常用基本操作之python3+selenium4自动化测试(基础篇3)
May 21 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 错误之引号中使用变量
2009/05/04 PHP
php设计模式之命令模式使用示例
2014/03/02 PHP
分享一则PHP定义函数代码
2015/02/26 PHP
Javascript 强制类型转换函数
2009/05/17 Javascript
Jquery中Event对象属性小结
2015/02/27 Javascript
js简单实现点击左右运动的方法
2015/04/10 Javascript
jquery实现带缩略图的全屏图片画廊效果实例
2015/06/25 Javascript
Vue.js常用指令汇总(v-if、v-for等)
2016/11/03 Javascript
js正则表达式最长匹配(贪婪匹配)和最短匹配(懒惰匹配)用法分析
2016/12/27 Javascript
Web开发使用Angular实现用户密码强度判别的方法
2017/09/27 Javascript
Three.js如何实现雾化效果示例代码
2017/09/27 Javascript
Vue弹出菜单功能的实现代码
2018/09/12 Javascript
自定义javascript验证框架示例【附源码下载】
2019/05/31 Javascript
[02:29]DOTA2英雄基础教程 陈
2013/12/17 DOTA
Python enumerate遍历数组示例应用
2008/09/06 Python
Python版的文曲星猜数字游戏代码
2013/09/02 Python
python3中str(字符串)的使用教程
2017/03/23 Python
Python基于OpenCV实现视频的人脸检测
2018/01/23 Python
python入门教程 python入门神图一张
2018/03/05 Python
Python实现字符串的逆序 C++字符串逆序算法
2020/05/28 Python
Python检测网络延迟的代码
2018/05/15 Python
python3+PyQt5 数据库编程--增删改实例
2019/06/17 Python
numpy:np.newaxis 实现将行向量转换成列向量
2019/11/30 Python
python 利用panda 实现列联表(交叉表)
2021/02/06 Python
详解使用CSS3的@media来编写响应式的页面
2017/11/01 HTML / CSS
css3实现冲击波效果的示例代码
2018/01/11 HTML / CSS
优瑞自动咖啡机官网:Jura
2018/09/29 全球购物
将n个数按输入顺序的逆序排列,用函数实现
2012/11/14 面试题
化学教学随笔感言
2014/02/19 职场文书
学校出纳员岗位职责
2014/03/18 职场文书
12.4法制宣传日活动总结
2014/08/26 职场文书
2014年群众路线教育实践活动整改措施
2014/09/24 职场文书
2015年大学生社会实践评语
2015/03/26 职场文书
党校团干班培训心得体会
2016/01/06 职场文书
Kubernetes控制节点的部署
2022/04/01 Servers
Android Canvas绘制文字横纵向对齐
2022/06/05 Java/Android