簡體   English   中英

a[0],a[1] = a[1],a[0]的過程會發生什么?

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

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