2017-04-08 23 views
0

我嘗試值的numpy.ndarray複製,方式如下:按值或按引用my_ndarray [...]

my_copy = my_original[...] 

然而,這似乎分配的參考。

雖然下面的方式不實際的數據複製:

my_copy[...] = my_original 

這混淆了我,因爲我一直認爲[...]將只是指普通的數據,從而使這兩種方式應該工作。

這些行爲的規則和原因究竟是什麼?在Numpy中複製數據的最佳做法是什麼?

回答

3

你混合兩個概念,第一個:

y = x[...] 

剛剛分配的x一個視圖到變量名yxy是不相同的,但他們共享相同的內存(所以更改將傳播到另一個)。

y[...] = x 

分配的x值以現有陣列y。這將複製值如果xy不共享內存!當你想創建數組的新副本。如果您想將陣列複製到現有陣列中,則需要確保不會丟失對要複製值的陣列的引用。所以你不得重新分配給變量名(所以y[:] = xy[...] = x是很好,因爲你的y內容的工作 - 但y = x只是「覆蓋」變量名,它不會修改原始y的內容) 。