使用任意函数填充 numpy 数组

Filling a numpy array using an arbitrary function

通常情况下,函数的求和会像这样在 python

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

其中 f 是一些函数。

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

首先,我将您的代码扩展到实际执行它所需的最低限度,包括选择特定的 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))

如您所见,结果更加简洁,对于大型数组,速度也会明显加快。