例如,如果我們有一個numpy數組A
,並且我們想要一個具有相同元素的numpy數組B
。Numpy數組賦值與副本
這些方法有什麼區別?什麼時候分配額外的內存,什麼時候不分配?
B = A
B[:] = A
(同B[:]=A[:]
?)numpy.copy(B, A)
例如,如果我們有一個numpy數組A
,並且我們想要一個具有相同元素的numpy數組B
。Numpy數組賦值與副本
這些方法有什麼區別?什麼時候分配額外的內存,什麼時候不分配?
B = A
B[:] = A
(同B[:]=A[:]
?)numpy.copy(B, A)
所有三個版本做不同的事情。
這將一個新名稱B
已命名A
現有對象。之後,他們會引用同一個對象,因此如果您修改了某個對象,您也會看到另一個對象的變化。
這會將A
中的值複製到現有陣列B
中。這兩個陣列必須具有相同的形狀才能工作。 B[:] = A[:]
做同樣的事情(但B = A[:]
會做更像1)。
這不是合法的語法。你可能意思是B = numpy.copy(A)
。這與2幾乎相同,但它會創建一個新陣列,而不是重新使用B
陣列。如果沒有其他引用的值爲B
,則最終結果與2相同,但在複製過程中會臨時使用更多內存。
編輯:或者你的意思是numpy.copyto(B, A)
,這是合法的,相當於2?
這是我唯一的工作答案:
B=numpy.array(A)
'B = A [:]'_不_做同樣的事情在1所有!試試'a = [1,2,3]; b = a [:];在b.append(4);打印(B);打印的(a)'。它定義了一個新的參考並將其複製到其中。 –
@Mr_and_Mrs_D:Numpy數組的工作方式與列表不同。切片數組不會創建副本,只會創建現有數組數據的新視圖。 – Blckknght
哦,我糾正了 - 謝謝。讓我們在這裏保留我的錯誤,因爲許多python程序員會想知道:) –