假设我计算了Beta(4,8)的密度:
from scipy.stats import beta
rv = beta(4, 8)
x = np.linspace(start=0, stop=1, num=200)
my_pdf = rv.pdf(x)
为什么pdf的积分不等于1?
> my_pdf.sum()
199.00000139548044
答案 0 :(得分:2)
pdf上的积分是一个。你可以通过使用scipy
中的数值积分来看到这一点>>> from scipy.integrate import quad
>>> quad(rv.pdf, 0, 1)
(0.9999999999999999, 1.1102230246251564e-14)
或通过编写自己的ad-hoc集成(在此示例中使用梯形规则)
>>> x = numpy.linspace(start=0, stop=1, num=201)
>>> (0.5 * rv.pdf(x[0]) + rv.pdf(x[1:-1]).sum() + 0.5 * rv.pdf(x[-1])) / 200.0
1.0000000068732813
答案 1 :(得分:1)
rv.pdf
会在x
的每个值处返回pdf的值。它并不总和,因为你实际上并不是计算积分。如果你想这样做,你需要将你的总和除以间隔的数量,即len(x) - 1
,即199.那么你会得到一个非常接近1的结果。