对两个边界之间的高斯分布进行积分 [Python]

Joh*_*row 3 python scipy

我试图在给定高斯的平均值和标准差的情况下获得两个边界之间高斯分布的积分。

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)
Run Code Online (Sandbox Code Playgroud)

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

Nat*_*iel 5

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)
Run Code Online (Sandbox Code Playgroud)
(0.5596176923702426, 5.087725389583706e-10)
Run Code Online (Sandbox Code Playgroud)

如果您想集成离散数据,scipy.integrate.quad则不是适合该工作的工具。scipy.integrate.simps代替使用。