繁体   English   中英

python中的求和评估

[英]Summation Evaluation in python

给定z = np.linspace(1,10,100)

计算z^k * exp((-z^2)/ 2)z^k * exp((-z^2)/ 2)所有值的求和

import numpy as np
import math

def calc_Summation1(z, k):
    ans = 0.0
    for i in range(0, len(z)):`
        ans += math.pow(z[i], k) * math.exp(math.pow(-z[i], 2) / 2)
    return ans

def calc_Summation2(z,k):
     part1 = z**k
     part2 = math.exp(-z**2 / 2)
     return np.dot(part1, part2.transpose())

有人能告诉我calc_Summation1calc_Summation2什么问题吗?

如果你想用numpy进行矢量化计算,你需要使用numpy的ufuncs。 此外,通常的计算方法是:

import numpy as np

calc = np.sum(z**k * np.exp(-z*z / 2))

虽然如果你调用np.exp而不是math.exp你可以使用np.dot保持你的方法:

calc = np.dot(z**k, np.exp(-z*z / 2))

使用点运行速度更快:

In [1]: z = np.random.rand(1000)

In [2]: %timeit np.sum(z**5 * np.exp(-z*z / 2))
10000 loops, best of 3: 142 µs per loop

In [3]: %timeit np.dot(z**5, np.exp(-z*z / 2))
1000 loops, best of 3: 129 µs per loop

In [4]: np.allclose(np.sum(z**5 * np.exp(-z*z / 2)),
...                 np.dot(z**5, np.exp(-z*z / 2)))
Out[4]: True

我想这可能就是你要找的东西:

sum(z_i**k * math.exp(-z_i**2 / 2) for z_i in z)
k=1
def myfun(z_i):
    return z_i**k * math.exp(-z_i**2 / 2)
sum(map(myfun,z))

我们为要求和的事物定义一个函数,使用map函数将它应用于列表中的每个值,然后对所有这些值求和。 必须使用外部变量k稍微有点傻笑。

一个改进是定义一个两个参数函数

def myfun2(z_i,k):
    return z_i**k * math.exp(-z_i**2 / 2)

并使用lambda表达式来评估它

sum(map(lambda x:myfun2(x,1), z))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM