计算ScipyLOGNORM.CDF()得到与MSExcelLOGNORM.DIST相同的答案
Calculate Scipy LOGNORM.CDF() and get the same answer as MS Excel LOGNORM.DIST
我正在使用 Microsoft Excel 2013 中的 LOGNORM.DIST 复制论文中的图表,并希望在 Python 中获得相同的图表。我在 excel 中得到正确答案,但在 python.
中却没有
在excel我有,
mean of ln(KE) 4.630495093
std dev of ln(KE) 0.560774853
然后我绘制 x (KE) 从 10 到 1000 并使用 Excel LOGNORM.DIST 并计算事件的概率。我从论文中得到了准确的答案,所以我对计算很有信心。剧情如下:
MS Excel 2013 Plot of LOGNORM.DIST
在python中,我使用的是Python 3.4和Scipy 0.16.0,我的代码如下:
%matplotlib inline
from scipy.stats import lognorm
import numpy as np
import matplotlib.pyplot as plt
shape = 0.560774853 #standard deviation
scale = 4.630495093 #mean
loc = 0
dist=lognorm(shape, loc, scale)
x=np.linspace(10,1000,200)
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.set_xscale('log')
ax.set_xlim([10., 1000.])
ax.set_ylim([0., 1.])
ax.plot(x,dist.cdf(x)), dist.cdf(103)
情节是,
我在 loc 参数上弄乱了很多,但没有任何效果。 python代码的最后一行
dist.cdf(103)
应该给我50%的概率,但显然我做错了。
scipy lognorm
分布的 scale
参数为 exp(mean)
,其中 mean
是基础正态分布的均值。所以你应该写:
scale = np.exp(mean)
这是一个生成类似 Excel 情节的脚本:
import numpy as np
from scipy.stats import lognorm
import matplotlib.pyplot as plt
shape = 0.560774853
scale = np.exp(4.630495093)
loc = 0
dist = lognorm(shape, loc, scale)
x = np.linspace(10, 1000, 500)
plt.semilogx(x, dist.cdf(x))
plt.grid(True)
plt.grid(True, which='minor')
plt.show()
我正在使用 Microsoft Excel 2013 中的 LOGNORM.DIST 复制论文中的图表,并希望在 Python 中获得相同的图表。我在 excel 中得到正确答案,但在 python.
中却没有在excel我有,
mean of ln(KE) 4.630495093
std dev of ln(KE) 0.560774853
然后我绘制 x (KE) 从 10 到 1000 并使用 Excel LOGNORM.DIST 并计算事件的概率。我从论文中得到了准确的答案,所以我对计算很有信心。剧情如下:
MS Excel 2013 Plot of LOGNORM.DIST
在python中,我使用的是Python 3.4和Scipy 0.16.0,我的代码如下:
%matplotlib inline
from scipy.stats import lognorm
import numpy as np
import matplotlib.pyplot as plt
shape = 0.560774853 #standard deviation
scale = 4.630495093 #mean
loc = 0
dist=lognorm(shape, loc, scale)
x=np.linspace(10,1000,200)
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.set_xscale('log')
ax.set_xlim([10., 1000.])
ax.set_ylim([0., 1.])
ax.plot(x,dist.cdf(x)), dist.cdf(103)
情节是,
我在 loc 参数上弄乱了很多,但没有任何效果。 python代码的最后一行
dist.cdf(103)
应该给我50%的概率,但显然我做错了。
scipy lognorm
分布的 scale
参数为 exp(mean)
,其中 mean
是基础正态分布的均值。所以你应该写:
scale = np.exp(mean)
这是一个生成类似 Excel 情节的脚本:
import numpy as np
from scipy.stats import lognorm
import matplotlib.pyplot as plt
shape = 0.560774853
scale = np.exp(4.630495093)
loc = 0
dist = lognorm(shape, loc, scale)
x = np.linspace(10, 1000, 500)
plt.semilogx(x, dist.cdf(x))
plt.grid(True)
plt.grid(True, which='minor')
plt.show()