簡體   English   中英

避免創建新數組作為numpy / scipy操作的結果?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM