最后我使用了@sascha的建议。我查看了this维基百科文章和Numpy源代码,发现了这个randomkit.c文件,它实现了函数rk_gauss(它实现了Box-Muller变换)、rk_double和{}(它实现了模拟均匀分布随机变量的Mersenne Twister随机数生成器,由Box-Muller变换所需)。在

然后,我从here改编了Mersenne扭曲器生成器,并实现了Box-Muller变换来模拟高斯(关于随机扭曲生成器here)的更多信息。在

下面是我最后编写的代码:import numpy as np

from datetime import datetime

import matplotlib.pyplot as plt

class Distribution():

def __init__(self):

pass

def plot(self, number_of_samples=100000):

# the histogram of the data

n, bins, patches = plt.hist([self.sample() for i in range(number_of_samples)], 100, normed=1, facecolor='g', alpha=0.75)

plt.show()

def sample(self):

# dummy sample function (to be overridden)

return 1

class Uniform_distribution(Distribution):

# Create a length 624 list to store the state of the generator

MT = [0 for i in xrange(624)]

index = 0

# To get last 32 bits

bitmask_1 = (2 ** 32) - 1

# To get 32. bit

bitmask_2 = 2 ** 31

# To get last 31 bits

bitmask_3 = (2 ** 31) - 1

def __init__(self, seed):

self.initialize_generator(seed)

def initialize_generator(self, seed):

"Initialize the generator from a seed"

global MT

global bitmask_1

MT[0] = seed

for i in xrange(1,624):

MT[i] = ((1812433253 * MT[i-1]) ^ ((MT[i-1] >> 30) + i)) & bitmask_1

def generate_numbers(self):

"Generate an array of 624 untempered numbers"

global MT

for i in xrange(624):

y = (MT[i] & bitmask_2) + (MT[(i + 1 ) % 624] & bitmask_3)

MT[i] = MT[(i + 397) % 624] ^ (y >> 1)

if y % 2 != 0:

MT[i] ^= 2567483615

def sample(self):

"""

Extract a tempered pseudorandom number based on the index-th value,

calling generate_numbers() every 624 numbers

"""

global index

global MT

if index == 0:

self.generate_numbers()

y = MT[index]

y ^= y >> 11

y ^= (y << 7) & 2636928640

y ^= (y << 15) & 4022730752

y ^= y >> 18

index = (index + 1) % 624

# divide by 4294967296, which is the largest 32 bit number

# to normalize the output value to the range [0,1]

return y*1.0/4294967296

class Norm(Distribution):

def __init__(self, mu=0, sigma_sq=1):

self.mu = mu

self.sigma_sq = sigma_sq

self.uniform_distribution_1 = Uniform_distribution(datetime.now().microsecond)

self.uniform_distribution_2 = Uniform_distribution(datetime.now().microsecond)

# some initialization if necessary

def sample(self):

# generate a sample, where the value of the sample being generated

# is distributed according a normal distribution with a particular

# mean and variance

u = self.uniform_distribution_1.sample()

v = self.uniform_distribution_2.sample()

return ((self.sigma_sq**0.5)*((-2*np.log(u))**0.5)*np.cos(2*np.pi*v)) + self.mu

这是完美的工作,并产生一个相当好的高斯

^{pr2}$

正态分布的概率密度函数python_如何实现高斯分布的概率密度函数相关推荐

  1. 【机器学习】【ICA-1】概率统计/代数知识详解:高斯分布、概率密度函数、累积分布函数、联合分布函数、复合函数的概率密度函数、行列式求导等

    要容易理解ICA,就需要先好好理解透彻下面这些概率统计和线性代数的知识点:高斯分布.概率密度函数.累积分布函数.复合函数的概率密度函数.行列式.代数余子式.矩阵微积分等.下面一一简单记录和复习下这些概 ...

  2. 二维正态分布的最大似然估计_最大似然估计-高斯分布

    前言:介绍了最简单的 问题 (这里都是玩具数据,为了方便理解才列出) 0123456789101112 X 1 2 3 4 4.2 4.4 4.6 4.8 5 6 7 8 y 0 0 0 0 1 1 ...

  3. ROC曲线是通过样本点分类概率画出的 例如某一个sample预测为1概率为0.6 预测为0概率0.4这样画出来,此外如果曲线不是特别平滑的话,那么很可能存在过拟合的情况...

    ROC和AUC介绍以及如何计算AUC from:http://alexkong.net/2013/06/introduction-to-auc-and-roc/ ROC(Receiver Operat ...

  4. 【读书笔记->统计学】04-02 利用概率理论预测和决策-条件概率、概率树、全概率公式、贝叶斯定理、相关与独立概念简介

    条件概率 现在书给我们提供了一个情境:已知下一次小球会停在黑色球位,赌小球会不会停在偶数球位上. 由于我们已经知道小球停在黑色球位,那么小球一定不会停在绿色或红色球位了,但我们求概率的时候,相应的范围 ...

  5. 概率导论(一)——样本空间与概率

    参考书:<概率导论>,作者:Dimitri P. Bertsekas,John N. Tsitsiklis. 本系列博客为自学<概率导论>笔记. 思维导图 集合 将一些研究对象 ...

  6. 概率题:掷一枚不均匀的硬币,正面概率为0.7,反面的概率为0.3,如何最高效地获得一个概率为0.5的事件?

    题目 掷一枚不均匀的硬币,正面概率为0.7,反面的概率为0.3,如何最高效地获得一个概率为0.5的事件? 解答: 丢两次.正反的概率和反正的概率各为 0.3 * 0.7 = 0.21,正正和反反的情况 ...

  7. java判断五张牌中有一对,五张同花顺概率,52张扑克牌,任取5张牌,求出现一对、两对、同花顺的概率。 请帮忙解决一下这道概率题,求详细的列出式......

    Q1:52张扑克牌,任取5张牌,求出现一对.两对.同花顺的概率. 请帮忙解决一下这道概率题,求详细的列出式... 给你三个式子:1*3/51*48/50*44/49*40/48这个是出现一对的概率 2 ...

  8. 算法-连胜概率问题-10把连胜3把概率

    算法-连胜概率问题-10把连胜3把概率 有一位朋友突然问我一道连胜的概率问题,自己研究一下,和大家分享,同时记录一下. 问题描述 小明每天玩10盘王者荣耀,且胜负完全随机(胜率50%),请用JS写一个 ...

  9. 概率/离散型分布/连续型分布/概率密度函数

    算概率首先要明确数据类型,因为数据类型会影响求概率的方式. 数据类型分为:1.离散型随机变量 2.连续型随机变量 离散型随机变量的取值为有限个或者无限可列个(整数集是典型的无限可列),这个算概率的时候 ...

最新文章

  1. 闪电网络运行过程中存在的一些问题
  2. C# xml文件的创建,修改和添加节点 。
  3. sublime用cmd窗口调试python_如何使用xdebug和sublime调试python脚本
  4. vue项目中简单进行axios封装及响应状态码提示!
  5. linux下怎么查看程序异常,linux程序莫名异常怎么查
  6. linux 静态库、共享库
  7. hdu acm2549
  8. 人人都该懂点儿TCP
  9. 如何在Kali Linux 2018上安装GeForce GTX 1060显卡驱动
  10. thinkphp mysql order_ThinkPHP中order()的使用方法
  11. [BZOJ4199][NOI2015]品酒大会-后缀数组
  12. 孩子学习arduino好还是单片机好
  13. MVP结合(RecycleView,Retorfit,GreenDao和EventBus)数据展示
  14. D. Shuffle(cf)暴力枚举 + 组合数学
  15. 在vue项目中引入JQuery
  16. 微拍堂积极践行社会责任,促进中国经济高质量发展
  17. 每日一讲:C语言getchar函数的用法
  18. 渝北统景碑口规划开发_渝北区御临河碑口水库主体工程开工建设
  19. jmeter压测学习10-linux上执行遇到的问题 There is insufficient memory for the Java Runtime Environment to continu
  20. python软件要钱吗-python 收费么

热门文章

  1. 【深度学习基础】张量的描述与深度学习常见张量
  2. 小白入门视频处理笔记:1. *.avi文件读入matlab后的数据结构
  3. Java-API-Package:org.springframework.web.bind.annotation
  4. oracle创建用户和角色、管理授权以及表空间操作
  5. 【输入法】Rime-中州韵 基本设置 附:官方定制指南
  6. nginx location 配置
  7. php的zend引擎执行过程 一
  8. Java中导入Excel文件
  9. 二叉树先序、中序、后序的递归算法---《数据结构》
  10. Java(2)数据类型转换、变量和常量