我有很多要集成的数据,并希望找到一种只用矩阵来完成所有操作的方法,并且愿意在准确性方面做出妥协以提高性能.我的想法是这样的:
import numpy import scipy a = np.array([1,2,3]) def func(x): return x**2 + x def func2(x): global a return a*x def integrand(x): return func(x)*func2(x) integrated = quad(integrand, 0, 1)
所以我试图将每个元素集成到数组中integrand
.
我知道有可能使用numpy.vectorize()
这样的:
integrated = numpy.vectorize(scipy.integrate.quad)(integrand, 0, 1)
但我无法做到这一点.有没有办法在python中执行此操作?
解
那么现在我学到了更多的python我可以回答这个问题,如果有人碰巧稳定在它上面并且有同样的问题.这样做的方法是编写函数,好像它们将采用标量值,而不是向量作为输入.所以按照上面的代码,我们会有类似的东西
import numpy as np import scipy.integrate.quad a = np.array([1, 2, 3]) # arbitrary array, can be any size def func(x): return x**2 + x def func2(x, a): return a*x def integrand(x, a): return func(x)*func2(x, a) def integrated(a): integrated, tmp = scipy.integrate.quad(integrand, 0, 1, args = (a)) return integrated def vectorizeInt(): global a integrateArray = [] for i in range(len(a)): integrate = integrated(a[i]) integrateArray.append(integrate) return integrateArray
并非您要集成的变量必须是函数的第一个输入.这是scipy.integrate.quad所必需的.如果要在方法上进行积分,则它是典型self
(即x
集成def integrand(self, x, a):
)之后的第二个参数.还args = (a)
需要告诉函数中quad
的值.如果有很多参数,请说你只需按顺序放入参数.那就是.a
integrand
integrand
def integrand(x, a, b, c, d):
args
args = (a, b, c, d)