我试图在python中生成对数正态分布的随机数(用于以后的MC模拟),我发现当参数稍大时,结果非常不一致.
下面我从Normals生成一系列LogNormals(然后使用Exp)并直接从LogNormals生成.由此产生的手段是可以忍受的,但差异 - 非常不精确..这也适用于mu = 4,5,......
如果你重复运行以下代码几次 - 结果会有很大不同.
码:
import numpy as np
mu = 10;
tmp1 = np.random.normal(loc=-mu, scale=np.sqrt(mu*2),size=1e7)
tmp1 = np.exp(tmp1)
print tmp1.mean(), tmp1.var()
tmp2 = np.random.lognormal(mean=-mu, sigma=np.sqrt(mu*2), size=1e7)
print tmp2.mean(), tmp2.var()
print 'True Mean:', np.exp(0), 'True Var:',(np.exp(mu*2)-1)
Run Code Online (Sandbox Code Playgroud)
任何建议如何解决这个问题?我也在Wakari.io上尝试了这个 - 所以结果也是一致的
更新:我采用了维基百科的"真实"均值和方差公式:https://en.wikipedia.org/wiki/Log-normal_distribution
结果快照:1)
0.798301881219 57161.0894726
1.32976988569 2651578.69947
True Mean: 1.0 True Var: 485165194.41
Run Code Online (Sandbox Code Playgroud)
2)
1.20346203176 315782.004309
0.967106664211 408888.403175
True Mean: 1.0 True Var: 485165194.41
Run Code Online (Sandbox Code Playgroud)
3)最后一个n = 1e8随机数
1.17719369919 2821978.59163
0.913827160458 338931.343819
True Mean: 1.0 …Run Code Online (Sandbox Code Playgroud)