了解 numpy.random.lognormal

Understanding numpy.random.lognormal

我正在将 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 又是一个随机变量的特定实例,我们可以称之为 xlog(x)这里是正态分布吗?是的,必须是,否则numpy不会调用这个函数lognormal。底层正态分布的均值是log(X_old),与Matlab代码中正态分布的均值相同。

因此,问题中对数正态分布的所有实现都是等效的(忽略语言之间任何非常低级的实现差异)。