Sao chép mảng NumPy so với xem
Sự khác biệt giữa Sao chép và Xem
Sự khác biệt chính giữa bản sao và chế độ xem của một mảng là bản sao là một mảng mới và chế độ xem chỉ là chế độ xem của mảng ban đầu.
Bản sao sở hữu dữ liệu và mọi thay đổi được thực hiện đối với bản sao sẽ không ảnh hưởng đến mảng ban đầu và mọi thay đổi được thực hiện đối với mảng ban đầu sẽ không ảnh hưởng đến bản sao.
Chế độ xem không sở hữu dữ liệu và mọi thay đổi được thực hiện đối với chế độ xem sẽ ảnh hưởng đến mảng ban đầu và mọi thay đổi được thực hiện đối với mảng ban đầu sẽ ảnh hưởng đến chế độ xem.
SAO CHÉP:
Ví dụ
Tạo một bản sao, thay đổi mảng ban đầu và hiển thị cả hai mảng:
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
x = arr.copy()
arr[0] = 42
print(arr)
print(x)
Hãy tự mình thử »Bản sao KHÔNG NÊN bị ảnh hưởng bởi những thay đổi được thực hiện đối với mảng ban đầu.
XEM:
Ví dụ
Tạo chế độ xem, thay đổi mảng ban đầu và hiển thị cả hai mảng:
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
x = arr.view()
arr[0] = 42
print(arr)
print(x)
Hãy tự mình thử »Chế độ xem NÊN bị ảnh hưởng bởi những thay đổi được thực hiện đối với mảng ban đầu.
Thực hiện các thay đổi trong VIEW:
Ví dụ
Tạo chế độ xem, thay đổi chế độ xem và hiển thị cả hai mảng:
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
x = arr.view()
x[0] = 31
print(arr)
print(x)
Hãy tự mình thử »Mảng ban đầu NÊN bị ảnh hưởng bởi những thay đổi được thực hiện đối với chế độ xem.
Kiểm tra xem mảng có sở hữu dữ liệu của nó không
Như đã đề cập ở trên, bản sao sở hữu dữ liệu và chế độ xem không sở hữu dữ liệu, nhưng làm cách nào để kiểm tra điều này?
Mỗi mảng NumPy có thuộc tính base
trả về None
nếu mảng đó sở hữu dữ liệu.
Mặt khác, thuộc tính base
đề cập đến đối tượng ban đầu.
Ví dụ
In giá trị của thuộc tính cơ sở để kiểm tra xem một mảng có sở hữu dữ liệu của nó hay không:
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
x = arr.copy()
y = arr.view()
print(x.base)
print(y.base)
Hãy tự mình thử » Bản sao trả về None
.
Chế độ xem trả về mảng ban đầu.