Thông báo: Download 4 khóa học Python từ cơ bản đến nâng cao tại đây.
Cách sử dụng hàm copy() trong NumPy với Python
Trong NumPy, khi bạn cắt (slice) một mảng, kết quả nhận được thường là một "view" của mảng gốc. Điều này có nghĩa là bất kỳ thay đổi nào trên mảng con cũng sẽ ảnh hưởng trực tiếp đến mảng ban đầu. Tuy nhiên, trong nhiều tình huống, bạn có thể muốn làm việc với một bản sao hoàn toàn độc lập của mảng đó. Trong bài viết này, bạn sẽ học cách sử dụng phương thức copy()
của NumPy để tạo ra một bản sao của mảng thay vì một "view", giúp bạn tránh được những thay đổi không mong muốn và đảm bảo dữ liệu gốc không bị ảnh hưởng.
Giới thiệu về phương thức NumPy copy() trong Python
Khi bạn cắt (slice) một mảng, bạn sẽ nhận được một mảng con. Mảng con này là một "view" của mảng gốc. Nói cách khác, nếu bạn thay đổi các phần tử trong mảng con, thay đổi này sẽ được phản ánh trong mảng gốc. Ví dụ:
import numpy as np a = np.array([ [1, 2, 3], [4, 5, 6] ]) b = a[0:, 0:2] print(b) b[0, 0] = 0 print(b) print(a)
Cách hoạt động
Đầu tiên, tạo một mảng 2D:
a = np.array([ [1, 2, 3], [4, 5, 6] ])
Thứ hai, cắt mảng a
và gán mảng con vào biến b
:
Bài viết này được đăng tại [free tuts .net]
b = a[0:, 0:2]
Biến b
sẽ là:
[[1 2] [4 5]]
Thay đổi phần tử tại chỉ mục [0,0]
trong mảng con b
thành số không và hiển thị biến b
:
b[0, 0] = 0 print(b)
Kết quả sẽ là:
[[0 2] [4 5]]
Vì b
là một "view" của mảng a
, thay đổi này cũng sẽ được phản ánh trong mảng a
:
print(a)
Kết quả sẽ là:
[[0 2 3] [4 5 6]]
Lý do NumPy tạo ra một "view" thay vì một mảng mới là để không phải sao chép dữ liệu, từ đó cải thiện hiệu suất.
Tuy nhiên, nếu bạn muốn có một bản sao của mảng thay vì một "view", bạn có thể sử dụng phương thức copy()
. Ví dụ:
import numpy as np a = np.array([ [1, 2, 3], [4, 5, 6] ]) # tạo bản sao b = a[0:, 0:2].copy() print(b) b[0, 0] = 0 print(b) print(a)
Trong ví dụ này:
Đầu tiên, gọi phương thức copy()
của mảng a
để tạo ra một bản sao của mảng con và gán nó vào biến b
.
Thay đổi phần tử tại chỉ mục [0,0]
của mảng b
. Vì cả hai mảng là độc lập, thay đổi này không ảnh hưởng đến mảng a
.
Kết bài
Khi bạn cắt một mảng trong NumPy, bạn sẽ nhận được một "view" của mảng đó, nghĩa là mọi thay đổi trên mảng con sẽ ảnh hưởng trực tiếp đến mảng gốc. Để tránh tình trạng này và đảm bảo rằng dữ liệu gốc không bị thay đổi, bạn nên sử dụng phương thức copy()
để tạo ra một bản sao hoàn toàn độc lập của mảng. Việc này không chỉ giúp bảo vệ dữ liệu gốc mà còn mang lại sự linh hoạt trong quá trình xử lý và thao tác dữ liệu trong các dự án lập trình của bạn.