使用任意函数填充 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))
如您所见,结果更加简洁,对于大型数组,速度也会明显加快。
通常情况下,函数的求和会像这样在 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))
如您所见,结果更加简洁,对于大型数组,速度也会明显加快。