我想寫一個函數,對數組執行數學運算並返回結果。一個簡單的例子可以是:改變numpy函數輸出數組
def original_func(A):
return A[1:] + A[:-1]
對於高速化,並避免分配用於每個函數調用一個新的輸出陣列,我想有輸出數組作爲參數,並改變它在適當位置:
def inplace_func(A, out):
out[:] = A[1:] + A[:-1]
然而,在下面的方式調用這兩個函數時,
A = numpy.random.rand(1000,1000)
out = numpy.empty((999,1000))
C = original_func(A)
inplace_func(A, out)
原有的功能似乎是快兩倍作爲就地功能。這怎麼解釋?不應該因爲它不需要分配內存而使得就地功能更快?
作爲一個解決方案:我認爲* *你必須自己做循環,以避免在奧利弗的回答中描述的中間陣列。或者,也許像http://code.google.com/p/numexpr/可以幫助你?這[問題](http://stackoverflow.com/questions/2937669/linear-combinations-in-python-numpy)也看起來相關。 – gspr
我認爲你可以通過這樣做來避免中間數組:'out [:] = A [1:]; out + = A [: - 1]'當然你的實際算法可能會變得更加難以精簡。當然,不惜一切代價儘量避免循環。你可以用累積和ufuncs做些創造性的事情。 – Paul