NUMPY
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

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.

test php

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

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

Screenshot 202024 06 04 20155811 png

Đầ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]]

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.

Cùng chuyên mục:

Hướng dẫn xây dựng Command-Line Interface (CLI) bằng Quo trong Python

Hướng dẫn xây dựng Command-Line Interface (CLI) bằng Quo trong Python

Hướng dẫn toàn diện về module datetime trong Python

Hướng dẫn toàn diện về module datetime trong Python

Cách truy cập và thiết lập biến môi trường trong Python

Cách truy cập và thiết lập biến môi trường trong Python

Lớp dữ liệu (Data Classes) trong Python với decorator @dataclass

Lớp dữ liệu (Data Classes) trong Python với decorator @dataclass

Từ khóa yield trong Python

Từ khóa yield trong Python

Sự khác biệt giữa sort() và sorted() trong Python

Sự khác biệt giữa sort() và sorted() trong Python

Sử dụng Poetry để quản lý dependencies trong Python

Sử dụng Poetry để quản lý dependencies trong Python

Định dạng chuỗi Strings trong Python

Định dạng chuỗi Strings trong Python

Một tác vụ phổ biến khi làm việc với danh sách trong Python

Một tác vụ phổ biến khi làm việc với danh sách trong Python

Làm việc với các biến môi trường trong Python

Làm việc với các biến môi trường trong Python

Sự khác biệt giữa set() và frozenset() trong Python

Sự khác biệt giữa set() và frozenset() trong Python

Sự khác biệt giữa iterator và iterable trong Python

Sự khác biệt giữa iterator và iterable trong Python

Cách làm việc với file tarball/tar trong Python

Cách làm việc với file tarball/tar trong Python

Chuyển đổi kiểu dữ liệu trong Python

Chuyển đổi kiểu dữ liệu trong Python

Sự khác biệt giữa toán tử == và is trong Python

Sự khác biệt giữa toán tử == và is trong Python

Làm việc với file ZIP trong Python

Làm việc với file ZIP trong Python

Cách sử dụng ThreadPoolExecutor trong Python

Cách sử dụng ThreadPoolExecutor trong Python

Sự khác biệt giữa byte objects và string trong Python

Sự khác biệt giữa byte objects và string trong Python

Xử lý độ chính xác các hàm floor, ceil, round, trunc, format  trong Python

Xử lý độ chính xác các hàm floor, ceil, round, trunc, format trong Python

Cách lặp qua nhiều list với hàm zip() trong Python

Cách lặp qua nhiều list với hàm zip() trong Python

Top