NumPy Array Copy so với View
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à dạng xem của một mảng là bản sao là một mảng mới và dạng xem chỉ là dạng xem của mảng ban đầu.
Bản sao sở hữu dữ liệu và bất kỳ thay đổi nào được thực hiện đối với bản sao sẽ không ảnh hưởng đến mảng gốc và bất kỳ thay đổi nào được thực hiện đối với mảng gốc sẽ không ảnh hưởng đến bản sao.
Chế độ xem không sở hữu dữ liệu và bất kỳ thay đổi nào được thực hiện đối với chế độ xem sẽ ảnh hưởng đến mảng ban đầu và bất kỳ thay đổi nào được thực hiện đối với mảng ban đầu sẽ ảnh hưởng đến chế độ xem.
BẢN SAO:
Thí dụ
Tạo 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)
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.
QUANG CẢNH:
Thí dụ
Tạo một dạng 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)
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 chế độ XEM:
Thí dụ
Tạo một dạng xem, thay đổi dạng 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)
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 sở hữu Dữ liệu của nó hay không
Như đã đề cập ở trên, các bản sao sở hữu dữ liệu và các khung nhìn không sở hữu dữ liệu, nhưng làm thế nào chúng ta có thể kiểm tra điều này?
Mọi mảng NumPy đều có thuộc tính base
trả về None
nếu mảng sở hữu dữ liệu.
Nếu không, base
thuộc tính tham chiếu đến đối tượng ban đầu.
Thí 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)
Bản sao trả lại None
.
Dạng xem trả về mảng ban đầu.