拆分数学和python一起使用

时间:2013-08-07 16:39:28

标签: python math

这是一个困扰我一段时间的简单问题。

我试图将我的代码重写为并行,并且在此过程中我需要分割要在多个节点上完成的总和,然后将这些小数量加在一起。我正在与之合作的是:

def pia(n, i):
        k = 0
        lsum = 0
        while k < n:
                p = (n-k)
                ld = (8.0*k+i)
                ln = pow(16.0, p, ld)
                lsum += (ln/ld)
                k += 1
        return lsum

其中n是限制,i是整数。有没有人提供一些关于如何拆分并最终获得相同结果的提示?

编辑:对于那些提问,我不是使用pow()而是使用自定义版本来有效地使用浮点数:

def ssp(b, n, m):
    ssp = 1
    while n>0:
            if n % 2 == 1:
                    ssp = (b*ssp) % m
            b = (b**2) % m
            n = n // 2
    return ssp

2 个答案:

答案 0 :(得分:1)

由于从一个传递到下一个传递使用的唯一变量是k,而k每次只增加一个,所以很容易将计算分开。

如果您还将k传递给pia,那么您将拥有可定义的起点和终点,并且您可以根据需要将其拆分为多个部分,最后,将所有结果一起添加。如下所示:

# instead of pia(20000, i), use pia(n, i, k) and run
result = pia(20000, i, 10000) + pia(10000, i, 0)

此外,由于n用于设置限制和直接计算,因此需要拆分这两个用途。

from math import pow

def pia(nlimit, ncalc, i, k):
        lsum = 0
        while k < nlimit:
                p = ncalc-k
                ld = 8.0*k+i
                ln = ssp(16., p, ld)
                lsum += ln/ld
                k += 1
        return lsum

if __name__=="__main__":
    i, ncalc = 5, 10
    print pia(10, ncalc, i, 0)
    print pia(5, ncalc, i, 0) + pia(10, ncalc, i, 5)

答案 1 :(得分:-1)

看起来我找到了办法。我所做的是在每个节点计算一个部分的总和中(例如,节点1计算k = 1,节点2 k = 2,节点3 k = 3,节点4 k = 4,节点1 k = 5 ...然后将它们收集起来并添加它们。