我想使用以下代码绘制Normal与Log-Normal函数:
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")
有什么问题?我期待类似:
答案 0 :(得分:3)
lognorm.pdf函数中的参数顺序与您的想法不同!
当您将订单反转为:
lognorm.pdf(exp(x), sd, mu)
,你得到了你期待的情节。
编辑:documentation提供pdf(x, s, loc=0, scale=1)
答案 1 :(得分: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=1
,就像norm.pdf(x,mu,sd)
一样绑定x=x
,loc=mu
,scale=sd
另请参阅tutorial的此部分。