通常灌裝一個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