我有很多資料要整合,我想找到一種方法來做所有的矩陣,并願意妥協的準确性,以提高性能。我的想法是這樣的: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():
^{pr2}$
但我不能讓它發揮作用。在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有很多參數,比如def integrand(x, a, b, c, d):您隻需将這些參數按順序排列在args中。那就是args = (a, b, c, d)。在