Định hình lại mảng NumPy


Định hình lại mảng

Định hình lại có nghĩa là thay đổi hình dạng của một mảng.

Hình dạng của một mảng là số phần tử trong mỗi chiều.

Bằng cách định hình lại, chúng tôi có thể thêm hoặc xóa thứ nguyên hoặc thay đổi số lượng phần tử trong mỗi thứ nguyên.


Định hình lại từ 1-D thành 2-D

Thí dụ

Chuyển đổi mảng 1-D có 12 phần tử sau đây thành mảng 2-D.

Chiều ngoài cùng sẽ có 4 mảng, mỗi mảng có 3 phần tử:

import numpy as np

arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])

newarr = arr.reshape(4, 3)

print(newarr)

Định hình lại từ 1-D thành 3-D

Thí dụ

Chuyển đổi mảng 1-D có 12 phần tử sau đây thành mảng 3-D.

Chiều ngoài cùng sẽ có 2 mảng chứa 3 mảng, mỗi mảng có 2 phần tử:

import numpy as np

arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])

newarr = arr.reshape(2, 3, 2)

print(newarr)


Chúng ta có thể định hình lại thành bất kỳ hình dạng nào không?

Có, miễn là các phần tử cần thiết để định hình lại ở cả hai hình dạng bằng nhau.

Chúng ta có thể định hình lại mảng 1D 8 phần tử thành 4 phần tử trong mảng 2D 2 hàng nhưng chúng ta không thể định hình lại nó thành mảng 3 phần tử 3 hàng 2D vì điều đó sẽ yêu cầu 3x3 = 9 phần tử.

Thí dụ

Hãy thử chuyển đổi mảng 1D có 8 phần tử thành mảng 2D với 3 phần tử trong mỗi chiều (sẽ phát sinh lỗi):

import numpy as np

arr = np.array([1, 2, 3, 4, 5, 6, 7, 8])

newarr = arr.reshape(3, 3)

print(newarr)

Trả về Sao chép hoặc Xem?

Thí dụ

Kiểm tra xem mảng được trả về là bản sao hay dạng xem:

import numpy as np

arr = np.array([1, 2, 3, 4, 5, 6, 7, 8])

print(arr.reshape(2, 4).base)

Ví dụ trên trả về mảng ban đầu, vì vậy nó là một khung nhìn.


Thứ nguyên không xác định

Bạn được phép có một thứ nguyên "không xác định".

Có nghĩa là bạn không phải chỉ định một số chính xác cho một trong các thứ nguyên trong phương pháp định hình lại.

Chuyển -1dưới dạng giá trị và NumPy sẽ tính toán con số này cho bạn.

Thí dụ

Chuyển đổi mảng 1D có 8 phần tử sang mảng 3D với 2 × 2 phần tử:

import numpy as np

arr = np.array([1, 2, 3, 4, 5, 6, 7, 8])

newarr = arr.reshape(2, 2, -1)

print(newarr)

Lưu ý: Chúng tôi không thể chuyển -1đến nhiều thứ nguyên.


Làm phẳng các mảng

Làm phẳng mảng có nghĩa là chuyển một mảng nhiều chiều thành mảng 1D.

Chúng tôi có thể sử dụng reshape(-1)để làm điều này.

Thí dụ

Chuyển mảng thành mảng 1D:

import numpy as np

arr = np.array([[1, 2, 3], [4, 5, 6]])

newarr = arr.reshape(-1)

print(newarr)

Lưu ý: Có rất nhiều hàm để thay đổi hình dạng của mảng trong numpy và flattencũng ravelđể sắp xếp lại các phần tử , rot90v.v. Các hàm này nằm trong phần Trung cấp đến Nâng cao của numpy.flipfliplrflipud


Kiểm tra bản thân với các bài tập

Bài tập:

Sử dụng đúng phương thức NumPy để thay đổi hình dạng của một mảng từ 1-D thành 2-D.

arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])

newarr = arr.(4, 3)