Rate this post

Hàm numpy.reshape () có sẵn trong gói NumPy. Như tên cho thấy, reshape có nghĩa là ‘những thay đổi về hình dạng’. Hàm numpy.reshape () giúp chúng ta có được một hình dạng mới cho một mảng mà không thay đổi dữ liệu của nó.

Đôi khi, chúng ta cần định hình lại dữ liệu từ rộng sang dài. Vì vậy, trong tình huống này, chúng ta phải định hình lại mảng bằng cách sử dụng hàm reshape ().

Giới thiệu về numpy.reshape()

Hàm numpy.reshape() trong Python là một phương thức của thư viện NumPy, cho phép thay đổi kích thước và hình dạng của một mảng NumPy mà không làm thay đổi dữ liệu trong mảng đó. Phương thức này được sử dụng để tái cấu trúc và biến đổi mảng theo các chiều khác nhau, nhằm phục vụ cho việc xử lý và phân tích dữ liệu hiệu quả hơn.

Với những lợi ích trên, numpy.reshape() là một công cụ hữu ích trong việc biến đổi và xử lý dữ liệu số trong Python, đặc biệt là khi làm việc với các phép toán và thuật toán trên các mảng đa chiều.

Cú pháp

numpy.reshape (arr, new_shape, order = 'C')

Tham số:

Có các tham số sau của hàm reshape ():

  1. arr: array_like

Đây là một ndarray. Đây là mảng nguồn mà chúng tôi muốn định hình lại. Tham số này rất cần thiết và đóng một vai trò quan trọng trong hàm numpy.reshape ().

  1. new_shape: int hoặc nhiều int

Hình dạng mà chúng ta muốn chuyển đổi mảng ban đầu của chúng ta phải tương thích với mảng ban đầu. Nếu là số nguyên, kết quả sẽ là mảng 1-D có độ dài đó. Một kích thước hình dạng có thể là -1. Ở đây, giá trị được tính gần đúng bởi độ dài của mảng và các kích thước còn lại.

  1. order: {‘C’, ‘F’, ‘A’}, tùy chọn

Tham số thứ tự chỉ mục này đóng một vai trò quan trọng trong hàm reshape (). Các thứ tự chỉ mục này được sử dụng để đọc các phần tử của mảng nguồn và đặt các phần tử vào mảng được định hình lại bằng cách sử dụng thứ tự chỉ mục này.

Thứ tự chỉ mục ‘C’ có nghĩa là đọc / ghi các phần tử đang sử dụng thứ tự chỉ mục giống C trong đó chỉ mục trục cuối cùng thay đổi nhanh nhất, quay lại chỉ mục trục đầu tiên thay đổi chậm nhất.

Thứ tự chỉ mục ‘F’ có nghĩa là đọc / ghi các phần tử đang sử dụng thứ tự chỉ mục giống Fortran, trong đó chỉ số trục cuối cùng thay đổi chậm nhất và chỉ số trục đầu tiên thay đổi nhanh nhất.

Thứ tự ‘C’ và ‘F’ không chiếm dung lượng bố trí bộ nhớ của mảng bên dưới và chỉ tham chiếu đến thứ tự lập chỉ mục.

Thứ tự chỉ mục ‘A’ có nghĩa là đọc / ghi các phần tử theo thứ tự chỉ mục giống Fortran, khi arr tiếp giáp trong bộ nhớ, nếu không thì sử dụng thứ tự giống C.

Return

Hàm này trả về một ndarray. Nó là một đối tượng xem mới nếu có thể; nếu không, nó sẽ là một bản sao. Không có gì đảm bảo về bố cục bộ nhớ của mảng được trả về.

Ví dụ về numpy.reshape () trong Python

Ví dụ 1: Thứ tự chỉ mục giống C

import numpy as np  
x=np.arange(12)  
y=np.reshape(x, (4,3))  
x  
y  

Output:

Trong đoạn code trên

  • Chúng tôi đã tạo một mảng ‘a’ bằng hàm np.arrange ().
  • Chúng tôi đã khai báo biến ‘y’ và gán giá trị trả về của hàm np.reshape ().
  • Chúng ta đã chuyển mảng ‘x’ và hình dạng trong hàm.
  • Cuối cùng, chúng tôi đã cố gắng in giá trị của arr.
  • Trong đầu ra, mảng đã được biểu diễn dưới dạng ba hàng và bốn cột.

Xem thêm Truy vấn Plan Cache Commands trong MongoDB

Ví dụ 2: Tương đương với C ravel thì C reshape

import numpy as np  
x=np.arange(12)  
y=np.reshape(np.ravel(x),(3,4))  
x  
y  

Hàm ravel () được sử dụng để tạo một mảng phẳng liền kề. Mảng một chiều chứa các phần tử của đầu vào, được trả về. Một bản sao chỉ được thực hiện khi nó cần thiết.

Output:

Ví dụ 3: Thứ tự chỉ mục giống Fortran

import numpy as np  
x=np.arange(12)  
y=np.reshape(x, (4, 3), order='F')  
x  
y  

Output:

Trong đoạn code trên

  • Chúng tôi đã tạo một mảng ‘a’ bằng hàm np.arrange ().
  • Chúng tôi đã khai báo biến ‘y’ và gán giá trị trả về của hàm np.reshape ().
  • Chúng tôi đã chuyển mảng ‘x’ và hình dạng và thứ tự chỉ mục giống Fortran trong hàm.
  • Cuối cùng, chúng tôi đã cố gắng in giá trị của arr.

Trong đầu ra, mảng đã được biểu diễn dưới dạng bốn hàng và ba cột.

Ví dụ 4: Thứ tự chỉ mục giống Fortran

import numpy as np  
x=np.arange(12)  
y=np.reshape(np.ravel(x, order='F'), (4, 3), order='F')  
x  
y  

Output:

Ví dụ 5: Giá trị không xác định được suy ra là 2

import numpy as np  
x=np.arange(12)  
y=np.reshape(x, (2, -1))  
x  
y  

Trong đoạn code trên

  • Chúng tôi đã tạo một mảng ‘a’ bằng hàm np.arrange ().
  • Chúng tôi đã khai báo biến ‘y’ và gán giá trị trả về của hàm np.reshape ().
  • Chúng ta đã chuyển mảng ‘x’ và hình dạng (giá trị không xác định) trong hàm.
  • Cuối cùng, chúng tôi đã cố gắng in giá trị của arr.

Trong đầu ra, mảng đã được biểu diễn dưới dạng hai hàng và năm cột.

Xem thêm Replace trong Python

Lưu ý khi sử dụng numpy.reshape()

Khi sử dụng hàm numpy.reshape() trong Python, có một số lưu ý quan trọng cần nhớ:

  1. Kích thước mới phải tương thích: Khi thay đổi hình dạng của mảng, kích thước mới phải tương thích với tổng số phần tử trong mảng ban đầu. Nếu kích thước mới không tương thích, sẽ xảy ra lỗi.
  2. Kích thước mới phải hợp lệ: Kích thước mới phải là một tuple hoặc một số nguyên. Đảm bảo rằng kích thước mới bạn chỉ định là hợp lệ và có thể được áp dụng cho mảng ban đầu.
  3. Số chiều không thay đổi: numpy.reshape() không thay đổi số chiều của mảng ban đầu. Số chiều của mảng mới phải giống như số chiều của mảng ban đầu.
  4. Mảng ban đầu không bị thay đổi: numpy.reshape() trả về một mảng mới với hình dạng và kích thước mới, nhưng không làm thay đổi mảng ban đầu. Để lưu kết quả mới, bạn cần gán mảng mới cho một biến hoặc sử dụng kết quả trả về.
  5. Thứ tự duyệt (order) mặc định: Tham số order trong numpy.reshape() có giá trị mặc định là ‘C’, đại diện cho thứ tự duyệt theo hàng (row-major order). Bạn có thể thay đổi tham số này để sử dụng thứ tự duyệt khác như ‘F’ (column-major order).
  6. Tối ưu hiệu suất: Khi thay đổi hình dạng của mảng, numpy.reshape() không sao chép dữ liệu. Thay vào đó, nó tạo ra một view mới trên cùng dữ liệu mà không làm thay đổi dữ liệu gốc. Điều này giúp tối ưu hiệu suất và tiết kiệm bộ nhớ.
  7. Tác động lên mảng gốc: Nếu bạn thay đổi giá trị trong mảng mới sau khi sử dụng numpy.reshape(), nó có thể tác động lên mảng gốc. Tùy theo trường hợp, điều này có thể là một lợi ích hoặc một nguy cơ, vì vậy hãy cẩn thận khi làm việc với mảng mới.

Đảm bảo hiểu rõ những lưu ý trên sẽ giúp bạn sử dụng numpy.reshape() một cách chính xác và tránh các lỗi không mong muốn trong quá trình xử lý dữ liệu.

Xem thêm Đọc file CSV, JSON, XLSX bằng Python

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Contact Me on Zalo
Call now