计算数值积分设置轴我希望集成Python

时间:2014-05-13 13:00:57

标签: python numpy scipy

我想数字地集成一个数组d维,例如名为c。

必须使用具有特定增量的某个轴​​来集成此超曲面。

让我们说这些特定的轴是:

  • X [1]
  • X [2]
  • x [d]

我写了一个在2 d中计算它的函数:

from numpy import*
import scipy.integrate as scint


def int2d(c,x,y):
    g=[]
    a=arange(0,size(y))
    for i in a:
        g.append(scint.simps(c[i],x))   
    return scint.simps(g,y)

这有效,

如何将其扩展到多维输入数组?

我需要它,因为我想计算直方图的某些函数的超音量。

1 个答案:

答案 0 :(得分:0)

您可以使用递归。

同样来自scipy.integrate.simps它表示假定的轴是最后一个轴。

import numpy
import scipy.integrate

def intNd(c,axes):
    ''' c is the array
    axes is a list of the corresponding coordinates
    ''' 
    assert len(c.shape) == len(axes)
    assert all([c.shape[i] == axes[i].shape[0] 
                for i in range(len(axes))])
    if len(axes) == 1:
        return scipy.integrate.simps(c,axes[0])
    else:
        return intNd(scipy.integrate.simps(c,axes[-1]),axes[:-1])

您还可以考虑通过首先集成最长的维度来提高集成大型复杂阵列的效率。然而。没有沿最后一个轴集成,这是最快的,可能会施加一些惩罚。我自己没有查看这些细节。