1

我在使用数组输入来计算函数的多个积分时遇到了困难。我想使用scipy.integrate's nquad function,因为我需要能够集成-np.inf to np.inf(我正在使用概率密度函数)。问题是 nquad 期望一个函数可以这样表述:

function(x_1, x_2, ..., x_n)

我需要集成的功能采用以下形式:

function(np.array([x_1, x_2, ..., x_n]))

有没有办法改变一个接受多个参数的数组的函数?如果没有,是否有替代 nquad 的方法?我尝试使用 quadpy,但它说我的积分超过 31,而实际值为 1。

谢谢您的帮助。

4

1 回答 1

0

我找到了解决方案。我通过创建一个接收 *args 的包装函数、将 args 转换为 numpy 数组并集成包装函数来解决此问题。

这是一个例子:

from scipy.integrate import nquad
from scipy.stats import multivariate_normal

mean = [0., 0.]
cov = np.array([[1., 0.],
                [0., 1.]])

bivariate_normal = multivariate_normal(mean=mean, cov=cov)

def pdf(*args):
    x = np.array(args)
    return bivariate_normal.pdf(x)

integration_range = [[-18, 18], [-18, 18]]

nquad(pdf, integration_range)

Output: (1.000000000000001, 1.3429066352690133e-08)
于 2021-02-11T19:20:28.360 回答