我目前正在尝试从下面显示的过程中获得结果。但是,所需步骤数花费的时间太长。我想加快结果。 在这种情况下如何实现多处理?
在我正在建立的课程中,我具有以下定义
def class_corr(self,Delta,xi_q,Q,counter):
to = self.t
npts = 512
x0 = 12
dx =2*x0/npts
norm=0
classic=0
for n in range(0,npts+1):
qi = -x0+n*dx
for m in range(0,npts+1):
pj = -x0+m*dx
for k in range(0,npts+1):
xi_pk = -x0+k*dx
f1 += dx**3*wt(qi,pj,qo,po,to)*F(qi,xi_pk,Delta, Q)
fn += dx**3*wt(qi,pj,qo,po,to)*G(qi,xi_pk,xi_q,Delta,Q)
if counter:
return [f1, fn/f1]
return fn/f1
使用多重处理甚至合理吗?
到目前为止,我已经检查了这些:
但是我无法实现这些功能,也没有找到解决方案。
答案 0 :(得分:2)
考虑到这一点,您真正遇到的是一个动态的编程风格问题。您继续重新计算相同的条款。例如,您只需要计算一次dx^3
,而您要进行npts^3
次。同样,您只需计算一次每个3*wt(qi,pj,qo,po,to)
项,但是您只需计算2*npts
次。
尝试类似的东西:
def class_corr(self,Delta,xi_q,Q,counter):
to = self.t
npts = 512
x0 = 12
dx =2*x0/npts
dx3 = dx**3
norm=0
classic=0
for n in range(0,npts+1):
qi = -x0+n*dx
for m in range(0,npts+1):
pj = -x0+m*dx
wt_curr = wt(qi,pj,qo,po,to)
for k in range(0,npts+1):
xi_pk = -x0+k*dx
f1 += dx3*wt_curr*F(qi,xi_pk,Delta, Q)
fn += dx3*wt_curr*G(qi,xi_pk,xi_q,Delta,Q)
if counter:
return [f1, fn/f1]
return fn/f1
此外,您计算F
和G
npts
的次数比所需次数多。看起来每个变量仅随qi
和xi_pk
而变化(xi_q
,Delta
和Q
在这种方法中似乎没有变化)。如果您尝试使用某种2层defaultdict来记录您已经计算出qi
(或xi_pk
)的F
和G
值,则可以节省了大量不必要的调用和F
(或G
)的计算。
(PS-我知道这不是您要寻找的方法,但我认为它可以解决您的问题的核心。您花费大量时间重新计算已经计算出的术语。)>