你有对数正态分布的模式和标准偏差。要使用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中从对数正态分布生成随机数相关推荐

  1. 在Python中使用逆变换方法生成随机变量

    目标 在仿真理论中,生成随机变量是最重要的"构建块"之一,而这些随机变量大多是由均匀分布的随机变量生成的.其中一种可以用来产生随机变量的方法是逆变换法.在本文中,我将向您展示如何使 ...

  2. Linux中使用shell脚本生成随机数

    Linux中使用shell脚本生成随机数 1.主体思想: 为了实现随机数的随机性,所以在这里借用date中的%s%N可以输出从1970年1月1日00:00:00到目前经历的秒数,从而产生变化的数字,再 ...

  3. python对数运算符号_科学网—Python中算数运算符之注意及np.logspace - 张伟的博文...

    (一)算数运算符 数字2 是一个整数的例子. 长整数 不过是大一些的整数. 3.23和52.3E-4是浮点数的例子.E标记表示10的幂.在这里,52.3E-4表示52.3 * 10-4. (-5+4j ...

  4. [转载] Python中的数学函数,三角函数,随机数函数

    参考链接: Python中的数学math函数 3(三角函数和角函数) 数学函数 函数返回值 ( 描述 )abs(x)返回数字的绝对值,如abs(-10) 返回 10ceil(x)返回数字的上入整数,如 ...

  5. python随机数生成_关于Python中的随机数生成步骤和随机数质量

    展开全部 Python生成随机数和随机数质量的方法,random.random()用于生成一个指定范围内的随机符点数,两个参数其62616964757a686964616fe78988e69d8331 ...

  6. [转载] python中随机数生成函数_python中seed随机函数如何生成随机数?

    参考链接: Python中的随机数 如果要考察某公司的牛奶产品质量,可以从100袋牛奶中抽取30袋,在随机数表中选中一数,并用向上.下.左.右不同的读法组成30个数,并按牛奶的标号进行检测,虽然麻烦, ...

  7. python中的对数_Python中求对数方法总结

    Python中Math库和Python库都具备求对数的函数. import numpy as np import math 1 2 1. Numpy库 1.1 求以e.2.10为底的对数 函数 功能 ...

  8. python正态分布函数_如何在Python中计算正态分布函数和gamma累积分布函数的逆函数?,scipy,python,中正,伽马,反函数...

    对于伽玛分布累积分布函数,在python中是 scipy.special.gdtr 伽玛分布累积分布函数. 返回伽玛概率密度函数从零到 x 的积分, 而伽玛分布累积分布函数的反函数是 gdtrix, ...

  9. java随机数语句_Java语言程序设计(七)Math类生成随机数及if语句

    Java有几种类型的选择语句,单向if语句,双向if语句,嵌套if语句,switch语句和条件表达式. 1.单向if语句 if(radius>=0){ area = radius*radius* ...

  10. python中哪个函数能生成集合_神奇的python系列11:函数之生成器,列表推导式

    1.生成器 生成器的本质是迭代器. 在python中有三种方式来获取生成器 1.通过生成器函数 2.通过各种推到式来实现生成器 3.通过数据的转换也可以获取生成器 #函数 deffunc():prin ...

最新文章

  1. 2022-2028年中国草炭土行业市场研究及前瞻分析报告
  2. c语言加减乘除算术程序,求一个计算加减乘除的C语言程序
  3. kafka 丢弃数据_20条关于Kafka集群应对高吞吐量的避坑指南
  4. typeof 与 js数据类型
  5. 第一章——数据结构之绪论
  6. git tag 的基本用法
  7. 【转】详解GAN代码之逐行解析GAN代码
  8. Java-实现图书管理系统
  9. python打印九九乘法表代码
  10. python识别文字答题_头脑王者的Python答题助手——从OCR文字识别到Fiddler抓包
  11. python 复制到剪贴板_Python脚本将文本复制到剪贴板
  12. Matlab 中值滤波原理分析
  13. Arduino安全和警报系统项目
  14. spring扫描出现Annotation-specified bean name 'userService' for bean class [com.test.service.UserService]
  15. MAC地址克隆 破解共享上网限制
  16. 7654:等差数列末项计算
  17. Hadoop十年解读与发展预测
  18. 宋星专访:一条特立独行的数据私有化之路
  19. 软件测试 — 常见的端口整理
  20. 2013年7月美国Boston之旅

热门文章

  1. 安卓打造自己的日历控件
  2. 文件关联后即时生效代码
  3. mysql数据库拒绝访问的解决过程_记一次MySQL数据库拒绝访问的解决过程
  4. 泛型转换https://www.cnblogs.com/eason-chan/p/3633210.html
  5. C#简单实现九宫数独算法:穷举+回溯
  6. CST设计接收贴片天线
  7. winvnc异常,端口变为5901
  8. 基于JAVA的免费天气预报接口查询
  9. matlab语音识别系统(源代码),matlab语音识别系统(源代码)
  10. 互联网金融革命已让银行家们彻夜难眠