簡體   English   中英

為什么添加和分配 (+=) 與 numpy.ndarrays 行為異常?

[英]Why is add and assign (+=) behaving strangely with numpy.ndarrays?

考慮以下 Python 代碼:

import numpy

a = numpy.random.rand(3,4)
b = numpy.random.rand(3,4)

c = a
c += b

c/2. - (a + b)/2.

最后一行的結果不是一個包含零的數組。 但是,如果我這樣做:

d = a
d = d + b

d/2. - (a + b)/2.

然后結果是0,正如預期的那樣。 這對我來說很奇怪,有人可以解釋這種行為嗎? 對 numpy arrays 使用+=, /=, ...是否明智? 謝謝!

(這只是一個最小的例子,我必須加起來幾個 arrays。)

+=操作就位。 這意味着它在您的第一個示例中更改了數組a的內容!

操作c=a使c指向與 a 完全相同a數據。 c += b也會將b添加到a

操作d = a也使d指向a 但隨后d = d + b將 memory 中的一個新點分配給d + b ,然后將d引用到這個新點。

如您所見,差異非常重要,對於許多算法,您可以利用這些屬性中的任何一個來提高效率。 但謹慎總是必要的。

在此處查看教程, 在此處查看深入的 SO 問題。

因為行c = a僅使 c 指向 a。 它不復制一個。 然后c += b也加到 a。

要將多個 arrays 相加,您必須直接進行,或者使用總和 function。

c = a + b
c = sum([a, b])
c = numpy.sum([a, b], axis=0)

或者先復制數組:

c = a.copy()
c += b

這是因為當你這樣做時:

c = a

從那時起, ac是相同的object。所以之后,

c += b

你還有c == a

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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