+-

我正在将Matlab代码(由其他人编写)翻译成 Python.
在Matlab代码的一部分中,将变量X_new设置为从对数正态分布得出的值,如下所示:
% log normal distribution
X_new = exp(normrnd(log(X_old), sigma));
也就是说,从以log(X_old)为中心的正态分布中提取一个随机值,并将X_new设置为e升至该值.
将此代码直接翻译成Python如下:
import numpy as np
X_new = np.exp(np.random.normal(np.log(X_old), sigma))
但是numpy包含对数正态分布,可以直接对其进行采样.
我的问题是,后面的代码行是否等同于上面的代码行?
X_new = np.random.lognormal(np.log(X_old), sigma)
最佳答案
我想我必须在这里回答我自己的问题.
从np.random.lognormal的文档中,我们有
A variable x has a log-normal distribution if log(x) is normally distributed.
让我们将Matlab代码中的X_new视为随机变量x的特定实例.问题是,log(x)是否在此处正常分布?好吧,log(X_new)只是normrnd(log(X_old),sigma).所以答案是肯定的.
现在,让我们转到第二版Python代码中对np.random.lognormal的调用. X_new还是随机变量的特定实例,我们可以称其为x. log(x)是否在此处正常分布?是的,必须是,否则numpy不会将此函数称为lognormal.基本正态分布的平均值为log(X_old),与Matlab代码中正态分布的平均值相同.
因此,问题中对数正态分布的所有实现都是等效的(忽略语言之间任何非常低级的实现差异).
点击查看更多相关文章
转载注明原文:理解numpy.random.lognormal - 乐贴网