Bản sao mảng NumPy vs quan sát

Khác biệt giữa bản sao và quan sát

Khác biệt chính giữa bản sao và quan sát mảng là bản sao là một mảng mới, trong khi quan sát chỉ là quan sát của mảng gốc.

Bản sao có dữ liệu, bất kỳ thay đổi nào đối với bản sao cũng không ảnh hưởng đến mảng gốc, và bất kỳ thay đổi nào đối với mảng gốc cũng không ảnh hưởng đến bản sao.

Bản xem không có dữ liệu, bất kỳ thay đổi nào đối với bản xem đều sẽ ảnh hưởng đến mảng gốc, và bất kỳ thay đổi nào đối với mảng gốc đều sẽ ảnh hưởng đến bản xem.

Bản sao:

Mẫu

Làm sao để sao chép, thay đổi mảng gốc và sau đó hiển thị hai mảng:

import numpy as np
arr = np.array([1, 2, 3, 4, 5])
x = arr.copy()
arr[0] = 61
print(arr) 
print(x)

Chạy mẫu

Bản sao này không nên bị ảnh hưởng bởi các thay đổi đối với mảng gốc.

Bản xem:

Mẫu

Tạo bản xem, thay đổi mảng gốc và sau đó hiển thị hai mảng:

import numpy as np
arr = np.array([1, 2, 3, 4, 5])
x = arr.view()
arr[0] = 61
print(arr) 
print(x)

Chạy mẫu

Bản xem nên bị ảnh hưởng bởi các thay đổi đối với mảng gốc.

Thay đổi trong bản xem:

Mẫu

Tạo bản xem, thay đổi bản xem và hiển thị 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)

Chạy mẫu

Mảng gốc nên bị ảnh hưởng bởi các thay đổi đối với bản xem.

Kiểm tra xem mảng có dữ liệu hay không

Như đã đề cập, bản sao có dữ liệu, trong khi bản xem không có dữ liệu, nhưng chúng ta làm thế nào để kiểm tra?

Mỗi mảng NumPy đều có một thuộc tính basenếu mảng có dữ liệu, thuộc tính base này sẽ trả về None.

Ngoài ra,base Thuộc tính sẽ tham chiếu đến đối tượng gốc.

Mẫu

In giá trị thuộc tính base để kiểm tra xem mảng có dữ liệu riêng 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)

Chạy mẫu

Trả về bản sao None.

Xem lại mảng ban đầu.