-1

我想使用以下代码绘制正态函数与对数正态函数:

from scipy.stats import norm, lognorm
import numpy as np
import matplotlib.pyplot as plt
# example: r(t) = ln(1 + R(t)) ~ N(0.05, (0.5)^2))
#          1 + R(t) = exp(r(t)) ~ logNormal(0.05, (0.5)^2)
#          R(t) = e(r(t)) - 1 ~ logNormal(0.05, (0.5)^2) - 1
#  
# plot normal and log normal density
mu = .05
sd = .5
x = np.linspace(mu - 3 * sd, mu + 3 * sd, 100)
plt.plot(x, norm.pdf(x, mu, sd), label="Normal") 
plt.plot(exp(x)-1, lognorm.pdf(exp(x), mu, sd), '--', label="Log-Normal")

怎么了 ?我期待类似的东西:范数与对数范数

4

2 回答 2

3

lognorm.pdf 函数中的参数顺序不是你想的那样!当您将顺序反转为: lognorm.pdf(exp(x), sd, mu)时,您会得到您所期望的情节。

编辑:文档给出pdf(x, s, loc=0, scale=1)

于 2013-01-11T15:20:17.900 回答
2

关于阅读 python 文档/函数调用如何工作的简要说明:

没有默认值的参数,即some_fun(a,b)是位置参数,它们是必需的(或者 python 将引发关于参数数量的错误)并根据函数调用中的位置进行分配。如果有一个默认值,即some_other_fun(a,b,c=None,d=0)它们被称为关键字参数并且是可选的。您可以通过两种方式使用可选参数,如果您不使用关键字,则将它们视为位置参数。如果您提供的参数少于签名中的参数总数,则这些值将按顺序分配,其余参数采用其默认值。您还可以使用关键字形式仅分配您想要的可选参数,而不为它们之前的列表中的所有内容提供值,即some_other_fun(1,2,d=3)不同于some_other_fun(1,2,3)

因此,当您调用时,lognorm.pdf(x,sd,mu)您的绑定为x=x, s=sd, loc=mu,scale=1norm.pdf(x,mu,sd)您的绑定一样x=x, loc=mu,scale=sd

另请参阅本教程的这一部分 。

于 2013-01-11T16:10:40.753 回答