对数正态分布随机数c语言,在python中从对数正态分布生成随机数
你有对数正态分布的模式和标准偏差。要使用scipy的rvs()方法,必须根据形状参数s参数化分布,这是基本正态分布的标准差sigma,而{},即{},其中{}是基础分布的平均值。在
您指出,进行这种重新参数化需要求解四次多项式。为此,我们可以使用numpy.poly1d类。该类的实例有一个roots属性。在
一个小代数表明exp(sigma**2)是多项式唯一的正实根x**4 - x**3 - (stddev/mode)**2 = 0
其中stddev和{}是对数正态分布的给定标准差和模式,对于该解,scale(即exp(mu))是
^{pr2}$
下面是一个将模式和标准偏差转换为形状和比例的函数:def lognorm_params(mode, stddev):
"""
Given the mode and std. dev. of the log-normal distribution, this function
returns the shape and scale parameters for scipy's parameterization of the
distribution.
"""
p = np.poly1d([1, -1, 0, 0, -(stddev/mode)**2])
r = p.roots
sol = r[(r.imag == 0) & (r.real > 0)].real
shape = np.sqrt(np.log(sol))
scale = mode * sol
return shape, scale
例如In [155]: mode = 123
In [156]: stddev = 99
In [157]: sigma, scale = lognorm_params(mode, stddev)
使用计算的参数生成样本:In [158]: from scipy.stats import lognorm
In [159]: sample = lognorm.rvs(sigma, 0, scale, size=1000000)
这是样品的标准偏差:In [160]: np.std(sample)
Out[160]: 99.12048952171304
下面是一些matplotlib代码来绘制样本的柱状图,在绘制样本的分布模式下绘制一条垂直线:In [176]: tmp = plt.hist(sample, normed=True, bins=1000, alpha=0.6, color='c', ec='c')
In [177]: plt.xlim(0, 600)
Out[177]: (0, 600)
In [178]: plt.axvline(mode)
Out[178]:
柱状图:
如果要使用numpy.random.lognormal()而不是scipy.stats.lognorm.rvs()生成样本,可以执行以下操作:In [200]: sigma, scale = lognorm_params(mode, stddev)
In [201]: mu = np.log(scale)
In [202]: sample = np.random.lognormal(mu, sigma, size=1000000)
In [203]: np.std(sample)
Out[203]: 99.078297384090902
我还没有研究poly1d的roots算法的健壮性,所以一定要测试各种可能的输入值。或者,您可以使用scipy的解算器来求解x的上述多项式。可以使用以下方法绑定解决方案:max(sqrt(stddev/mode), 1) <= x <= sqrt(stddev/mode) + 1
对数正态分布随机数c语言,在python中从对数正态分布生成随机数相关推荐
- 在Python中使用逆变换方法生成随机变量
目标 在仿真理论中,生成随机变量是最重要的"构建块"之一,而这些随机变量大多是由均匀分布的随机变量生成的.其中一种可以用来产生随机变量的方法是逆变换法.在本文中,我将向您展示如何使 ...
- Linux中使用shell脚本生成随机数
Linux中使用shell脚本生成随机数 1.主体思想: 为了实现随机数的随机性,所以在这里借用date中的%s%N可以输出从1970年1月1日00:00:00到目前经历的秒数,从而产生变化的数字,再 ...
- python对数运算符号_科学网—Python中算数运算符之注意及np.logspace - 张伟的博文...
(一)算数运算符 数字2 是一个整数的例子. 长整数 不过是大一些的整数. 3.23和52.3E-4是浮点数的例子.E标记表示10的幂.在这里,52.3E-4表示52.3 * 10-4. (-5+4j ...
- [转载] Python中的数学函数,三角函数,随机数函数
参考链接: Python中的数学math函数 3(三角函数和角函数) 数学函数 函数返回值 ( 描述 )abs(x)返回数字的绝对值,如abs(-10) 返回 10ceil(x)返回数字的上入整数,如 ...
- python随机数生成_关于Python中的随机数生成步骤和随机数质量
展开全部 Python生成随机数和随机数质量的方法,random.random()用于生成一个指定范围内的随机符点数,两个参数其62616964757a686964616fe78988e69d8331 ...
- [转载] python中随机数生成函数_python中seed随机函数如何生成随机数?
参考链接: Python中的随机数 如果要考察某公司的牛奶产品质量,可以从100袋牛奶中抽取30袋,在随机数表中选中一数,并用向上.下.左.右不同的读法组成30个数,并按牛奶的标号进行检测,虽然麻烦, ...
- python中的对数_Python中求对数方法总结
Python中Math库和Python库都具备求对数的函数. import numpy as np import math 1 2 1. Numpy库 1.1 求以e.2.10为底的对数 函数 功能 ...
- python正态分布函数_如何在Python中计算正态分布函数和gamma累积分布函数的逆函数?,scipy,python,中正,伽马,反函数...
对于伽玛分布累积分布函数,在python中是 scipy.special.gdtr 伽玛分布累积分布函数. 返回伽玛概率密度函数从零到 x 的积分, 而伽玛分布累积分布函数的反函数是 gdtrix, ...
- java随机数语句_Java语言程序设计(七)Math类生成随机数及if语句
Java有几种类型的选择语句,单向if语句,双向if语句,嵌套if语句,switch语句和条件表达式. 1.单向if语句 if(radius>=0){ area = radius*radius* ...
- python中哪个函数能生成集合_神奇的python系列11:函数之生成器,列表推导式
1.生成器 生成器的本质是迭代器. 在python中有三种方式来获取生成器 1.通过生成器函数 2.通过各种推到式来实现生成器 3.通过数据的转换也可以获取生成器 #函数 deffunc():prin ...
最新文章
- 2022-2028年中国草炭土行业市场研究及前瞻分析报告
- c语言加减乘除算术程序,求一个计算加减乘除的C语言程序
- kafka 丢弃数据_20条关于Kafka集群应对高吞吐量的避坑指南
- typeof 与 js数据类型
- 第一章——数据结构之绪论
- git tag 的基本用法
- 【转】详解GAN代码之逐行解析GAN代码
- Java-实现图书管理系统
- python打印九九乘法表代码
- python识别文字答题_头脑王者的Python答题助手——从OCR文字识别到Fiddler抓包
- python 复制到剪贴板_Python脚本将文本复制到剪贴板
- Matlab 中值滤波原理分析
- Arduino安全和警报系统项目
- spring扫描出现Annotation-specified bean name 'userService' for bean class [com.test.service.UserService]
- MAC地址克隆 破解共享上网限制
- 7654:等差数列末项计算
- Hadoop十年解读与发展预测
- 宋星专访:一条特立独行的数据私有化之路
- 软件测试 — 常见的端口整理
- 2013年7月美国Boston之旅
热门文章
- 安卓打造自己的日历控件
- 文件关联后即时生效代码
- mysql数据库拒绝访问的解决过程_记一次MySQL数据库拒绝访问的解决过程
- 泛型转换https://www.cnblogs.com/eason-chan/p/3633210.html
- C#简单实现九宫数独算法:穷举+回溯
- CST设计接收贴片天线
- winvnc异常,端口变为5901
- 基于JAVA的免费天气预报接口查询
- matlab语音识别系统(源代码),matlab语音识别系统(源代码)
- 互联网金融革命已让银行家们彻夜难眠