【问题标题】:Summation Evaluation in pythonpython中的求和求和
【发布时间】:2014-03-30 06:00:46
【问题描述】:

鉴于 z = np.linspace(1,10,100)

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

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 有什么问题?

【问题讨论】:

  • - 在指数中的位置错误。你有math.exp(math.pow(-z[i], 2) / 2) 你想要math.exp(-math.pow(z[i], 2) / 2)
  • 第二次使用part2 = map(math.exp,-z**2 / 2)return np.dot(part1, part2)无需转置一维数组。

标签: python python-2.7 math numpy


【解决方案1】:

我认为这可能是您正在寻找的:

sum(z_i**k * math.exp(-z_i**2 / 2) for z_i in z)

【讨论】:

    【解决方案2】:

    如果你想用 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))
    

    使用 dot 确实运行得更快:

    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
    

    【讨论】:

      【解决方案3】:
      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))
      

      【讨论】:

      • 请解释您的更改行为
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-28
      • 2019-04-10
      • 2021-12-20
      • 2015-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多