我正在尝试在 Python 中集成一些矩阵条目。我想避免循环,因为我的任务包括 1 个 Mio 模拟。我正在寻找能够有效解决我的问题的规范。
我收到以下错误:只有大小为 1 的数组可以转换为 Python 标量
from scipy import integrate
import numpy.random as npr
n = 1000
m = 30
x = npr.standard_normal([n, m])
def integrand(k):
return k * x ** 2
integrate.quad(integrand, 0, 100)
这是我的案例的一个简单示例。我有多个嵌套函数,所以我不能简单地将 x 放在积分前面。
最佳答案
好吧,您可能想为此使用并行执行。只要你只想执行 integrate.quad 30000000 次就应该很容易。只需将您的工作量分成小包并将其交给线程池即可。当然,加速受限于您电脑中的内核数量。我不是 python 程序员,但这应该是可能的。您还可以在 quad 函数中增加 epsabs 和 epsrel 参数,这取决于实现,这也应该加速程序。当然,您会得到不太精确的结果,但这可能没问题,具体取决于您的问题。
import threading
from scipy import integrate
import numpy.random as npr
n = 2
m = 3
x = npr.standard_normal([n,m])
def f(a):
for j in range(m):
integrand = lambda k: k * x[a,j]**2
i =integrate.quad(integrand, 0, 100)
print(i) ##write it to result array
for i in range(n):
threading.Thread(target=f(i)).start();
##better split it up even more and give it to a threadpool to avoid
##overhead because of thread init
关于python - Python 中矩阵值的数值积分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57104590/