2024-09-19 18:35:39 发布
网友
给出了对数正态分布的log10均值和log10标准差。我想从这个对数正态分布中得到一个随机数。在
这可以用numpy.random.lognormal,即使该函数的输入是基础正态分布的平均值和标准值(我没有这个)?在
另外,我从函数中得到的随机数是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)
用一点代数,这些可以颠倒过来:
然后你可以用这些来生成一个样本。下面是一个例子:
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转换为自然分布。在
Wikipedia表示对数正态分布的参数是用基本正态分布表示的,因此:
用一点代数,这些可以颠倒过来:
^{pr2}$然后你可以用这些来生成一个样本。下面是一个例子:
在试运行中,输出为3.00126241708,4.99737569477,与参数3,5一致。在
lognormal中的“log”总是代表自然对数(以e为底),所以这就是您将得到的结果。在
最后,如果您的输入数据是log10(lognormal_mean)和log10(lognormal_std),那么第一步是
我还将检查资料来源,看看他们是否使用含糊不清的短语“log10 mean”来表示“log10 of mean”或“mean of log10”。如果它是“log10的平均值”,那么您不需要上面的任何东西;您已经有了基本正态分布的参数,它们只需要乘以log(10)就可以从log10转换为自然分布。在
相关问题 更多 >
编程相关推荐