dbl*_*iss 5 python matlab numpy normal-distribution natural-logarithm
我正在将 Matlab 代码(由其他人编写)翻译为 Python。
在 Matlab 代码的一部分中,变量X_new被设置为从对数正态分布中得出的值,如下所示:
% log normal distribution
X_new = exp(normrnd(log(X_old), sigma));
Run Code Online (Sandbox Code Playgroud)
也就是说,从以 为中心的正态分布中抽取一个随机值log(X_old),并将X_new其设置为e提高到该值。
这段代码直接翻译成Python如下:
import numpy as np
X_new = np.exp(np.random.normal(np.log(X_old), sigma))
Run Code Online (Sandbox Code Playgroud)
但numpy包括可以直接采样的对数正态分布。
我的问题是,下面的代码行与上面的代码行等效吗?
X_new = np.random.lognormal(np.log(X_old), sigma)
Run Code Online (Sandbox Code Playgroud)
我想我必须在这里回答我自己的问题。
从 的文档中np.random.lognormal,我们有
如果 log(x) 服从正态分布,则变量 x 具有对数正态分布。
让我们将X_newMatlab 代码视为随机变量的特定实例x。问题是,log(x)这里是正态分布吗?嗯,log(X_new)只是normrnd(log(X_old), sigma)。所以答案是肯定的。
现在让我们转向np.random.lognormal第二个版本的 Python 代码中的调用。 X_new又是一个随机变量的特定实例,我们可以称之为x。log(x)正常分布在这里吗?是的,必须是,否则numpy不会调用这个函数lognormal。底层正态分布的均值log(X_old)与Matlab代码中正态分布的均值相同。
因此,问题中对数正态分布的所有实现都是等效的(忽略语言之间任何非常低级的实现差异)。
| 归档时间: |
|
| 查看次数: |
1954 次 |
| 最近记录: |