Python IDL';s INT_表格-SciPy等价物?

Python IDL';s INT_表格-SciPy等价物?,python,numpy,scipy,idl,idl-programming-language,Python,Numpy,Scipy,Idl,Idl Programming Language,我正在将一些代码从IDL迁移到python中。一个IDL调用是INT_tablate,它在固定范围内执行积分 整列函数在一个闭区间[min(x),马克斯(x)]上用一个五点Newton Cotes积分公式将一组数据{席,Fi}集成在一起。 Result=INT\u制表(X,F[,/DOUBLE][,/SORT]) 其中结果是曲线下的面积 我的问题是,Numpy/SciPy是否提供了类似的集成形式?我看到存在[scipy.integrate.newton_cotes],但它似乎返回“而不是区域”

我正在将一些代码从IDL迁移到python中。一个IDL调用是INT_tablate,它在固定范围内执行积分

整列函数在一个闭区间[min(x),马克斯(x)]上用一个五点Newton Cotes积分公式将一组数据{席,Fi}集成在一起。

Result=INT\u制表(X,F[,/DOUBLE][,/SORT])

其中结果是曲线下的面积


我的问题是,Numpy/SciPy是否提供了类似的集成形式?我看到存在
[scipy.integrate.newton_cotes]
,但它似乎返回“而不是区域”。默认情况下,scipy没有为列表数据提供如此高阶的积分器。没有自己编码的最接近的方法是使用3点牛顿-科茨方法

如果您只是想获得可比的积分精度,可以将
x
f
数组拆分为5个点块,然后使用
scipy.integrate.newton_cotes
返回的权重一次对它们进行积分,方法如下:

def idl_tabulate(x, f, p=5) :
    def newton_cotes(x, f) :
        if x.shape[0] < 2 :
            return 0
        rn = (x.shape[0] - 1) * (x - x[0]) / (x[-1] - x[0])
        weights = scipy.integrate.newton_cotes(rn)[0]
        return (x[-1] - x[0]) / (x.shape[0] - 1) * np.dot(weights, f)
    ret = 0
    for idx in xrange(0, x.shape[0], p - 1) :
        ret += newton_cotes(x[idx:idx + p], f[idx:idx + p])
    return ret
>>> x = np.array([0.0, 0.12, 0.22, 0.32, 0.36, 0.40, 0.44, 0.54, 0.64,
...               0.70, 0.80])
>>> f = np.array([0.200000, 1.30973, 1.30524, 1.74339, 2.07490, 2.45600,
...               2.84299, 3.50730, 3.18194, 2.36302, 0.231964])
>>> idl_tabulate(x, f)
1.641998154242472