NumPy 數組副本 vs 視圖
- 上一頁 NumPy 數據類型
- 下一頁 NumPy 數組形狀
副本和視圖之間的區別
副本和數組視圖之間的主要區別在于副本是一個新數組,而這個視圖只是原始數組的視圖。
副本擁有數據,對副本所做的任何更改都不會影響原始數組,對原始數組所做的任何更改也不會影響副本。
視圖不擁有數據,對視圖所做的任何更改都會影響原始數組,而對原始數組所做的任何更改都會影響視圖。
副本:
實例
進行復制,更改原始數組并顯示兩個數組:
import numpy as np arr = np.array([1, 2, 3, 4, 5]) x = arr.copy() arr[0] = 61 print(arr) print(x)
該副本不應受到對原始數組所做更改的影響。
視圖:
實例
創建視圖,更改原始數組,然后顯示兩個數組:
import numpy as np arr = np.array([1, 2, 3, 4, 5]) x = arr.view() arr[0] = 61 print(arr) print(x)
視圖應該受到對原始數組所做更改的影響。
在視圖中進行更改:
實例
創建視圖,更改視圖,并顯示兩個數組:
import numpy as np arr = np.array([1, 2, 3, 4, 5]) x = arr.view() x[0] = 31 print(arr) print(x)
原始數組應該受到對視圖所做更改的影響。
檢查數組是否擁有數據
如上所述,副本擁有數據,而視圖不擁有數據,但是我們如何檢查呢?
每個 NumPy 數組都有一個屬性 base
,如果該數組擁有數據,則這個 base 屬性返回 None
。
否則,base
屬性將引用原始對象。
實例
打印 base 屬性的值以檢查數組是否擁有自己的數據:
import numpy as np arr = np.array([1, 2, 3, 4, 5]) x = arr.copy() y = arr.view() print(x.base) print(y.base)
副本返回 None
。
視圖返回原始數組。
- 上一頁 NumPy 數據類型
- 下一頁 NumPy 數組形狀