使用python模拟高斯分布例子

 更新时间:2019年12月09日 09:42:10   作者:毛利学python  
今天小编就为大家分享一篇使用python模拟高斯分布例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

正态分布(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()

来个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模拟高斯分布例子就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Python3处理HTTP请求的实例

    Python3处理HTTP请求的实例

    今天小编就为大家分享一篇Python3处理HTTP请求的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • 利用python检测文本相似性的三种方法

    利用python检测文本相似性的三种方法

    文本查重,也称为文本去重,是一项旨在识别文本文档之间的相似性或重复性的技术或任务,它的主要目标是确定一个文本文档是否包含与其他文档相似或重复的内容,本文给大家介绍了利用python检测文本相似性的原理和方法,需要的朋友可以参考下
    2023-11-11
  • 在 Python 中使用通配符匹配字符串的方法

    在 Python 中使用通配符匹配字符串的方法

    这篇文章主要介绍了在 Python 中使用通配符匹配字符串的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-03-03
  • Python imgaug库安装与使用教程(图片加模糊光雨雪雾等特效)

    Python imgaug库安装与使用教程(图片加模糊光雨雪雾等特效)

    imgaug机器学习实验中的图像增强库,特别是卷积神经网络,支持以多种不同方式增强图像、关键点/地标、边界框、热图和分割图,这篇文章主要介绍了Python imgaug库 安装与使用教程(图片加模糊光雨雪雾等特效),需要的朋友可以参考下
    2022-11-11
  • Python实现一键自动分类管理文件

    Python实现一键自动分类管理文件

    经常杂乱无章的文件夹会让我们找不到所想要的文件,所以本文小编特意为大家介绍了如何制作一个可视化GUI界面,通过输入路径一键点击实现文件分门别类的归档,希望对大家有所帮助<BR>
    2024-01-01
  • Python集合中remove()函数的使用方法详解

    Python集合中remove()函数的使用方法详解

    这篇文章主要给大家介绍了关于python集合中remove()函数的使用,以及在使用Python集合的remove方法时应注意的事项,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2023-07-07
  • 利用Python Pygame放个烟花

    利用Python Pygame放个烟花

    Pygame是一款专门为开发和设计 2D 电子游戏而生的软件包,它支 Windows、Linux、Mac OS 等操作系统,具有良好的跨平台性。本文将用它放个烟花,快来一起动手尝试一下吧
    2022-01-01
  • 详解PyTorch nn.Embedding() 嵌入

    详解PyTorch nn.Embedding() 嵌入

    在自然语言处理(NLP)中,将文本序列转化为数字序列(tokenid)后,为了使模型能更好地理解这些数字背后的含义,引入了嵌入层(Embedding)通过简单的示例,可以看出Embedding的获取过程及其在理解语言中的关键作用
    2024-11-11
  • Python实现微信公众平台自定义菜单实例

    Python实现微信公众平台自定义菜单实例

    这篇文章主要介绍了Python实现微信公众平台自定义菜单实例,本文直接给出实现代码,需要的朋友可以参考下
    2015-03-03
  • 利用在Python中数值模拟研究气体扩散

    利用在Python中数值模拟研究气体扩散

    在 Python 中,可以使用数值模拟来研究气体扩散。本文就来通过一些示例为大家讲讲具体的实现方法,文中的示例代码讲解详细,感兴趣的小伙伴可以学习一下
    2023-01-01

最新评论