【发布时间】:2019-03-19 22:11:59
【问题描述】:
我正在尝试在距离矩阵上计算普通 ODE(常微分方程),但我不知道如何并行化我的代码。
from scipy.integrate import quad
from math import exp
import numpy as np
import matplotlib.pyplot as plt
#I have my distance matrix and I wanna count how many points are distanced
# from point i with distance r at maximum
def v(dist, r, i):
return 1/N*(np.count_nonzero(np.select([dist[i,:]<r],[dist[i,:]]))+1)
#integral of rho from r to infinity
def rho_barre(rho, r):
return quad(rho, r, np.inf)
# integral over r of a certain integrand
def grad_F(i, j, rho, v, v_r, dist):
return quad(lambda r : ((v(dist, r, i)+v(dist, r, j))/2-v_r)*rho_barre(rho, max(r, dist[i,j])), 0, np.inf)
#parameters
delta_T = 0.1
rho = (lambda x: exp(-x))
v_r =0
for t in range (1000):
for i in range(N):
for j in range(N):
d_matrix[i,j] = d_matrix[i,j] + delta_T* grad_F(i,j,rho, v, v_r, d_matrix)
首先我有以下错误can't multiply sequence by non-int of type 'float',我不明白为什么。然后,我知道在 python 中三个循环太多了,我想知道如何在 Python 中让它更快。
【问题讨论】:
标签: python numpy parallel-processing ode