Vei*_*pse 5 python math numpy python-2.7
给定的
z = np.linspace(1,10,100)
计算所有 z 值的总和 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())
Run Code Online (Sandbox Code Playgroud)
有人能告诉我calc_Summation1and 有calc_Summation2什么问题吗?
如果你想用numpy向量化计算,你需要使用numpy的ufuncs。另外,通常的计算方法是:
\n\nimport numpy as np\n\ncalc = np.sum(z**k * np.exp(-z*z / 2))\nRun Code Online (Sandbox Code Playgroud)\n\nnp.dot尽管如果您致电np.exp而不是使用,则可以继续使用您的方法math.exp:
calc = np.dot(z**k, np.exp(-z*z / 2))\nRun Code Online (Sandbox Code Playgroud)\n\n使用点确实运行得更快:
\n\nIn [1]: z = np.random.rand(1000)\n\nIn [2]: %timeit np.sum(z**5 * np.exp(-z*z / 2))\n10000 loops, best of 3: 142 \xc2\xb5s per loop\n\nIn [3]: %timeit np.dot(z**5, np.exp(-z*z / 2))\n1000 loops, best of 3: 129 \xc2\xb5s per loop\n\nIn [4]: np.allclose(np.sum(z**5 * np.exp(-z*z / 2)),\n... np.dot(z**5, np.exp(-z*z / 2)))\nOut[4]: True\nRun Code Online (Sandbox Code Playgroud)\n