通常灌装一个numpy的阵列,函数的总和将被这样在python使用任意的函数
fsum = 0
for k in range(1, N+1):
fsum += f(k)
哪里f
是一些函数来完成。
使用numpy
的整点是vectorize everything。在这种情况下,对于非常大的N
,循环将会很慢。如何使用numpy
填充numpy array
使用函数f
(可能需要多个参数)?
通常灌装一个numpy的阵列,函数的总和将被这样在python使用任意的函数
fsum = 0
for k in range(1, N+1):
fsum += f(k)
哪里f
是一些函数来完成。
使用numpy
的整点是vectorize everything。在这种情况下,对于非常大的N
,循环将会很慢。如何使用numpy
填充numpy array
使用函数f
(可能需要多个参数)?
首先,我已经扩大你的代码,以实际执行它,包括选择一个特定的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上的numpy.sum矢量函数(K):
print np.sum(f(k))
正如可以看到的结果是更简洁,对于大型阵列它将也要快得多。
你的例子不适合标题。你没有填充数组,你正在一个简单的值范围内求和一个函数。在'numpy'中,通过使用快速编译代码的函数来表达问题,从而“矢量化”。 – hpaulj 2015-01-31 18:17:12
@hpaulj谢谢指出(+1)。我的(不正确的)假设是我可以通过做这样的事情来填充'numpy'数组:'narray = np.array(f,range)'。对于任何在相同假设条件下犯此错误的人,我都会留下标题。 – Samaursa 2015-01-31 18:57:46