使用任意函数填充numpy数组

时间:2015-01-31 17:56:17

标签: python numpy

通常,函数的总和将在python中以这样的方式完成

fsum = 0
for k in range(1, N+1):
    fsum += f(k)

其中f是某种功能。

使用numpy的重点是vectorize everything。在这种情况下,对于非常大的N,循环将变慢。如何使用numpy使用函数numpy array(可能需要多个参数)来填充f

1 个答案:

答案 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))

正如您所看到的,结果更简洁,对于大型数组,它也会更快。