Bản sao và Chế độ xem (Copies and Views)
Khi làm việc với mảng NumPy, bạn có thể truy cập mảng theo các cách khác nhau chỉ bằng cách thay đổi một số siêu dữ liệu (metadata) nhất định như bước nhảy (stride) và kiểu dữ liệu (dtype) mà không làm thay đổi bộ đệm dữ liệu. Điều này tạo ra một cách nhìn dữ liệu mới và những mảng mới này được gọi là các chế độ xem (views).
Chế độ xem (View)
Một chế độ xem có thể được tạo ra thông qua phương thức ndarray.view. Bộ đệm dữ liệu vẫn giữ nguyên, vì vậy bất kỳ thay đổi nào được thực hiện đối với một chế độ xem đều phản ánh trong bản sao gốc.
Bản sao (Copy)
Khi một mảng mới được tạo ra bằng cách sao chép cả bộ đệm dữ liệu cũng như các siêu dữ liệu, nó được gọi là một bản sao (copy). Những thay đổi được thực hiện trên bản sao không phản ánh lên mảng gốc. Việc tạo bản sao chậm hơn và tiêu tốn bộ nhớ hơn nhưng đôi khi lại cần thiết. Một bản sao có thể được tạo ra bằng cách sử dụng ndarray.copy.
Thao tác lập chỉ mục
Các chế độ xem được tạo ra khi các phần tử có thể được xác định bằng các độ lệch (offsets) và bước nhảy trong mảng gốc. Do đó, lập chỉ mục cơ bản luôn tạo ra các chế độ xem.
x = np.arange(10)
y = x[1:3] # tạo một chế độ xem
x[1:3] = [10, 11]
# y bây giờ là array([10, 11])Mặt khác, lập chỉ mục nâng cao luôn tạo ra các bản sao.
x = np.arange(9).reshape(3, 3)
y = x[[1, 2]]
# y là một bản saoCách phân biệt mảng là một chế độ xem hay một bản sao
Thuộc tính base của ndarray giúp dễ dàng nhận biết một mảng là một chế độ xem hay một bản sao. Thuộc tính base của một chế độ xem sẽ trả về mảng gốc, trong khi nó trả về None đối với một bản sao.
x = np.arange(9)
y = x.reshape(3, 3)
y.base # Trả về x (nó là một chế độ xem)
z = y[[2, 1]]
z.base is None # True (nó là một bản sao)
Python