[英]Avoid creating new arrays as results for numpy/scipy operations?
對於在numpy / scipy中進行重復操作,會產生大量開銷,因為大多數操作都會返回一個新對象。
例如
for i in range(100):
x = A*x
我想通過傳遞對操作的引用來避免這種情況,就像在C中一樣
for i in range(100):
np.dot(A,x,x_new) #x_new would now store the result of the multiplication
x,x_new = x_new,x
有沒有辦法做到這一點? 我想這不僅僅是為了復制,而是所有返回矩陣或向量的操作。
請參閱學習以避免在IPython Books中使用不必要的數組副本 。 從那里,請注意例如這些指導方針:
a *= b
不會產生副本,而:
a = a * b
會產生一份副本。 此外, flatten()
將復制,而ravel()
僅在必要時復制並返回視圖(因此通常應首選)。 reshape()
也不會生成副本,但會返回一個視圖。
此外,正如@hpaulj和@ali_m在他們的評論中指出的那樣,許多numpy函數都支持out
參數,所以看一下docs。 來自numpy.dot()docs :
out:ndarray,可選輸出參數。
如果沒有使用,它必須具有返回的確切類型。 特別是,它必須具有正確的類型,必須是C-contiguous,並且其dtype必須是為dot(a,b)返回的dtype。 這是一個性能功能。 因此,如果不滿足這些條件,則會引發異常,而不是嘗試靈活。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.