得到对数正态随机数给定log10均值和log10标准差

2024-09-19 18:35:39 发布

您现在位置:Python中文网/ 问答频道 /正文

给出了对数正态分布的log10均值和log10标准差。我想从这个对数正态分布中得到一个随机数。在

这可以用numpy.random.lognormal,即使该函数的输入是基础正态分布的平均值和标准值(我没有这个)?在

另外,我从函数中得到的随机数是log10,自然对数,还是正则数?在


Tags: 函数numpy对数random基础均值平均值正则
1条回答
网友
1楼 · 发布于 2024-09-19 18:35:39

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转换为自然分布。在

相关问题 更多 >