[英]What happens in the process of a[0],a[1] = a[1], a[0]?
今天下午我發現了一個難以理解的現象。我想在 ndarray 中交換兩行代碼,如下所示。
import numpy as np
a = np.random.randint(0, 40, size=(4, 4))
a = a + a.T
b = a.copy()
print(a)
b[1], b[3] = b[3], b[1]
print(b)
但是一個意想不到的結果來了。打印結果如下
[[60 64 12 33]
[64 30 29 60]
[12 29 40 64]
[33 60 64 76]]
[[60 64 12 33]
[33 60 64 76]
[12 29 40 64]
[33 60 64 76]]
我知道 a,b = b,a 是有效的。我想知道它們之間有什么區別? 你能用 memory 來談談這個問題嗎? 提前謝謝你!
b[3]
和b[1]
是原始數組的視圖。 他們不復制他們的數據。 這是你大部分時間想要的。
因此,當您首先編寫b[1], b[3] = b[3], b[1]
時,第三行被分配給第一行,從而更改數組b
。 此時b[1]
已更改,因此當b[3] = b[1]
發生時,您的原始數據就消失了。
b[[1, 3]] = b[[3, 1]]
做你想做的事(也稱為“花式指示”,這不會創建視圖)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.