python - Python 中矩阵值的数值积分

标签 python matrix scipy numerical-integration

我正在尝试在 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/

相关文章:

c - 为什么在为矩阵分配内存时会出现段错误?

python - 在 Python 中创建矩阵

python - 如何在 matplotlib 中以毫米为单位设置轴尺寸和位置?

python - 在 python 代码中创建的窗口中更改字体

r - 如何将数据框转换为没有列名的矩阵

python - spdiags() 函数在 Python 中未按预期工作

python - 使用 scipy 的低阶近似

arrays - future 警告 : Using a non-tuple sequence for multidimensional indexing

python - 如何更新 Matplotlib 中流图的颜色?

python - 将yaml解析为python中的列表