对数正态随机数c语言程序,得到对数正态随机数给定log10均值和log10标准差

Wikipedia表示对数正态分布的参数是用基本正态分布表示的,因此:lognormal_mean = np.exp(normal_mean + normal_std**2 / 2)

lognormal_std = np.sqrt(np.exp(normal_std**2) - 1) * np.exp(normal_mean + normal_std**2 / 2)

用一点代数,这些可以颠倒过来:

^{pr2}$

然后你可以用这些来生成一个样本。下面是一个例子:lognormal_mean = 3

lognormal_std = 5

normal_std = np.sqrt(np.log(1 + (lognormal_std/lognormal_mean)**2))

normal_mean = np.log(lognormal_mean) - normal_std**2 / 2

sample = np.random.lognormal(normal_mean, normal_std, size=10000000)

print(sample.mean(), sample.std())

在试运行中,输出为3.00126241708,4.99737569477,与参数3,5一致。在

lognormal中的“log”总是代表自然对数(以e为底),所以这就是您将得到的结果。在

最后,如果您的输入数据是log10(lognormal_mean)和log10(lognormal_std),那么第一步是lognormal_mean = 10**log10_lognormal_mean_

lognormal_std = 10**log10_lognormal_std

我还将检查资料来源,看看他们是否使用含糊不清的短语“log10 mean”来表示“log10 of mean”或“mean of log10”。如果它是“log10的平均值”,那么您不需要上面的任何东西;您已经有了基本正态分布的参数,它们只需要乘以log(10)就可以从log10转换为自然分布。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值