前言

对于随机数平时我们还是比较常用的,一般都会直接通过各种语言原生自带的随机函数,比如 c++ 中有random()函数,java 中有 Random 类,python 有 random 模块等等。都能很方便生成随机变量,但它们有一个特点,那就是都服从均匀分布,而有些场景需要要生成不同分布的随机变量。

随机变量

随机变量即随机函数,通过该函数能生成每个可能事件对应的一个值。比如我们掷骰子,每次按一定的概率生成一个值。有两种类型变量,
* 离散型随机变量,能取到的不相同的值是有限个或可列无限多个。
* 连续型随机变量,能取到的值可以是连续的,在某个区间内可取任意一实数。

概率密度函数

主要用来表示不同点对应的概率大小,即X轴上每个单位长度对应的概率大小。概率等于面积,当某区间长度趋于0时则变为一个点,此时概率大小为f(x)。

常见分布

  • 伯努利分布,即0-1分布,随机变量为0或为1,概率为p和1-p。
  • 二项分布,进行n次伯努利实验,相对于不同成功次数对应的概率。
  • 泊松分布,是二项分布的极限形式。
  • 均匀分布,在相同长度间隔的分布概率是等可能的。
  • 正态分布,又名高斯分布,正态曲线呈钟型,两头低,中间高。
  • 指数分布,描述事件以恒定平均速率连续且独立地发生的过程的概率分布。
  • 逻辑斯蒂分布,增长分布,形状有点像正态分布。

生成分布算法

  • Inverse Transform Method,首先生成一个均匀分布的随机数,再求指定分布的分布函数F(x),然后求得F(x)的逆函数G(x),将随机数带入逆函数得到的即为指定分布的随机数。
  • Acceptance-Rejection Method,首先生成一个均匀分布随机数a,设概率密度函数为f(x),然后再生成一个均匀分布随机数b,若b<=f(a),则成功得到指定分布的随机数,否则从头开始。

实现

两种算法都比较容易理解,第一个需要求逆函数,有时并不好求,而第二个基本没什么限制,对于任何分布都能很完成任务。下面就用第二种方法实现生成几种分布的随机数。

正态分布

def normal_pdf(x, mu=0, sigma=1):return (1 / (math.sqrt(2 * math.pi) * sigma)) * (math.exp(-math.pow(x - mu, 2) / (2 * math.pow(sigma, 2))))def standard_normal_rand():while True:a = random.uniform(-4.0, 4.0)b = random.uniform(0.0, 3.0)if b < normal_pdf(a):return a, b

指数分布

def exponential_pdf(x, lam=1):return lam * math.exp(-lam * x)def exponential_rand():while True:a = random.uniform(0.0, 100.0)b = random.uniform(0.0, 3.0)if b <= exponential_pdf(a):return a, b

泊松分布

def poisson_pdf(x, lam=1):return (math.pow(lam, x) / math.factorial(x)) * math.exp(-lam)def poisson_rand():while True:a = random.randint(0, 50)b = random.uniform(0.0, 1.0)if b <= poisson_pdf(a):return a, b

github

https://github.com/sea-boat/MachineLearning_Lab/blob/master/distribution_gen.py

————-推荐阅读————

我的2017文章汇总——机器学习篇

我的2017文章汇总——Java及中间件

我的2017文章汇总——深度学习篇

我的2017文章汇总——JDK源码篇

我的2017文章汇总——自然语言处理篇

我的2017文章汇总——Java并发篇


跟我交流,向我提问:

公众号的菜单已分为“分布式”、“机器学习”、“深度学习”、“NLP”、“Java深度”、“Java并发核心”、“JDK源码”、“Tomcat内核”等,可能有一款适合你的胃口。

为什么写《Tomcat内核设计剖析》

欢迎关注:

如何生成指定分布的随机数相关推荐

  1. 如何产生指定分布的随机数?

    参考:https://www.cnblogs.com/xingshansi/p/6539319.html: https://www.jianshu.com/p/3d30070932a8: https: ...

  2. Excel 技巧篇-公式实现在指定范围内生成指定小数位的随机数

    Excel 生成随机数的公式有两种: 第一个是,生成 0 到 1 之间的小数 =RAND() 第二个是,生成指定两个数之间的整数 =RANDBETWEEN(1,100) 如果我们想要在指定范围内生成指 ...

  3. mysql默认值是随机数_mysql生成指定位数的随机数及批量生成随机数的方法

    1. 先介绍几个常用的 mysql 函数 rand()    随机生成 0~1 之间的小数(0<1) ceiling    向上取整 floor    向下取整 2. 生成随机数 -- 生成 3 ...

  4. python 生成指定概率的随机数

    生成指定概率的随机数 需求 解决方法 需求 遇到一些情况需要指定概率的条件下生成随机数,比如要生成姓名字符串,随机生成的话一般是两个字的姓名和3个字的姓名概率是一样的,而实际应该是大部分偏向三个字的, ...

  5. R语言使用rnorm函数基于不同的均值、方差参数生成正太分布的随机数、使用plot函数和density函数可视化正太分布的随机数对应的密度图、自定义设置均值和方差

    R语言使用rnorm函数基于不同的均值.方差参数生成正太分布的随机数.使用plot函数和density函数可视化正太分布的随机数对应的密度图.自定义设置均值和方差(Normal distributio ...

  6. java生成指定范围的随机数(太屌了)

    生成指定范围内的随机数 这个是最常用的技术之一.程序员希望通过随机数的方式来处理众多的业务逻辑,测试过程中也希望通过随机数的方式生成包含大量数字的测试用例.问题往往类似于: 如何随机生成 1~100 ...

  7. 【C++操作手册】C++生成指定范围内随机数rand(随机数种子)

    c++中的rand函数是用来生成随机数的,它的生成范围是0-Random_max,这个一个内部定义的一个常量,如果我们需要每次生成的随机数不同,这时需要加上随机数种子,利用srand()函数,我们可以 ...

  8. mysql生成固定位数随机数_mysql生成指定位数的随机数

    1. 先介绍几个常用的 MySQL 函数 RAND()    随机生成 0~1 之间的小数(0<1) CEILING    向上取整 FLOOR    向下取整 2. 生成随机数 [code]- ...

  9. python生成指定位数随机数_python生成指定长度的随机数密码

    复制代码 代码如下: #!/usr/bin/env python # -*- coding:utf-8 -*- #导入random和string模块 import random, string def ...

最新文章

  1. iqoo升级鸿蒙,vivo iQOO 3升级更新PD1955_A_1.12.27固件rom全量刷机包
  2. asp.net 在 Ngnix 服务器 中配置攻略
  3. 看张悟本神医现象有感
  4. 如何从另一个线程更新GUI?
  5. 倒计时2天!AI大咖云集、30场技术公开课,还有乐队... 年度最有意思的AI开发者活动来了!...
  6. Windows Azure Tools DSInit Error
  7. 科大星云诗社动态20220101
  8. 不要在viewWillDisappear:方法中移除通知
  9. 模糊图像处理 去除模糊_图像模糊如何工作
  10. 模拟器不全屏_puNES 适用于 Windows 和 Linux 的开源 NES 模拟器
  11. struts2的国际化(即实现网站整体中英文切换)实例
  12. Idea搭建SpringCloud(三)------Ribbon实现负载均衡及其自定义算法策略
  13. Curl 下载安装和配置
  14. 做数据分析,一定会用到的12类实用图表
  15. FairGuard游戏加固兼容摸摸鱼和TAPTAP云玩
  16. 友盟单点推送(推送给单个设备)
  17. 如何通过fiddler来进行接口数据mock测试
  18. 小羊的暑假博客计划教程索引
  19. Python 3.6实现单博主微博文本、图片及热评爬取
  20. 诺基亚S40V5平台实现后台运行图文教程

热门文章

  1. 一口气看完大唐安史之乱
  2. 如何在10分钟内构建交互式HTML5广告
  3. 小程序和公众号商城【免费开源+小白式安装】
  4. 给出两个单词,找到它们的最短距离
  5. 《大数据日知录》读书笔记-ch2数据复制与一致性
  6. java使用JCO调用SAP接口
  7. 约瑟夫问题-pythonc++
  8. 迈向 Grid 二维布局时代
  9. 企业做直播如何选择好的直播平台?需要考虑哪些方面?
  10. 泛微E-Cology XXE漏洞复现(QVD-2023-16177)