通常,函数的总和将在python中以这样的方式完成
fsum = 0
for k in range(1, N+1):
fsum += f(k)
其中f
是某种功能。
使用numpy
的重点是vectorize everything。在这种情况下,对于非常大的N
,循环将变慢。如何使用numpy
使用函数numpy array
(可能需要多个参数)来填充f
?
答案 0 :(得分:4)
首先,我已将代码扩展到实际执行代码所需的最低限度,包括选择特定的f(k):
import numpy as np
def f(k):
return(np.log(k**2))
N=8
fsum = 0
for k in range(1, N+1):
fsum += f(k)
print fsum
21.209给出和回答。现在让我们做同样的事情,但矢量化。注意函数f(k)是相同的。
import numpy as np
def f(k):
return(np.log(k**2))
N=8
k = np.array(range(1, N+1))
print np.sum(f(k))
这给出了相同的答案。关键的区别在于我已经定义了一个numpy数组来包含你在for循环中迭代的输入。那就是:
k = np.array(range(1, N+1))
如果你想提高效率,可以简化为:
k = np.arange(1, N+1)
由于f(k)已被编写为使用numpy数学函数,因此它已经被矢量化。然后我没有使用包含+ =操作的循环,而是在f(k)上使用了numpy.sum向量化函数:
print np.sum(f(k))
正如您所看到的,结果更简洁,对于大型数组,它也会更快。