在Python中,将高斯分布积分在两个边界之间

3
我正在尝试计算高斯分布在给定均值和标准差下两个界限之间的积分。
import numpy as np
import scipy

mu = 5
sigma = 30
lowerbound = 0.5
upperbound = np.inf

# generate Gaussian function
x = np.linspace(mu - 3*sigma, mu + 3*sigma, 100)
gauss = scipy.stats.norm.pdf(x, mu, sigma)

# integrate between bounds
integral = scipy.integrate.quad(gauss, lowerbound, upperbound)

这会引发一个ValueError: invalid callable given,所以我做错了什么但我不知道是什么。


3
提醒:您可以跳过“quad”,而是使用“integral = scipy.stats.norm.cdf(upperbound, mu, sigma) - scipy.stats.norm.cdf(lowerbound, mu, sigma)”来计算。 - Warren Weckesser
1
由于你的上限为inf,因此你可以使用生存函数方法s f: integral = scipy.stats.norm.sf(lowerbound, mu, sigma) - Warren Weckesser
1个回答

5
< p > quad 函数需要一个函数作为其第一个输入,但你提供的是在 x 处评估的高斯数据:

import numpy as np
import scipy

mu = 5
sigma = 30
lowerbound = 0.5
upperbound = np.inf

# generate Gaussian function
def gauss(x):
    return scipy.stats.norm.pdf(x, mu, sigma)

# integrate between bounds
integral = scipy.integrate.quad(gauss, lowerbound, upperbound)
print(integral)

(0.5596176923702426, 5.087725389583706e-10)

如果你想要集成离散数据,scipy.integrate.quad 并不是适合这个任务的工具。相反,应该使用 scipy.integrate.simps

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接