Đị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ảng là số phần tử trong mỗi chiều.
Bằng cách định hình lại, chúng ta có thể thêm hoặc bớt các kích thước hoặc thay đổi số phần tử trong mỗi kích thước.
Định hình lại từ 1-D thành 2-D
Ví dụ
Chuyển đổi mảng 1-D sau đây với 12 phần tử 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)
Hãy tự mình thử »Định hình lại từ 1-D thành 3-D
Ví dụ
Chuyển đổi mảng 1-D sau đây với 12 phần tử thành mảng 3-D.
Chiều ngoài cùng sẽ có 2 mảng gồm 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)
Hãy tự mình thử » 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 yếu tố cần thiết để định hình lại đều bằng nhau ở cả hai hình.
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 2D 3 phần tử 3 hàng vì điều đó sẽ yêu cầu 3x3 = 9 phần tử.
Ví dụ
Hãy thử chuyển đổi mảng 1D có 8 phần tử thành mảng 2D có 3 phần tử ở mỗi chiều (sẽ báo lỗi):
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8])
newarr = arr.reshape(3, 3)
print(newarr)
Hãy tự mình thử »Trả về Bản sao hoặc Xem?
Ví dụ
Kiểm tra xem mảng 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)
Hãy tự mình thử »Ví dụ trên trả về mảng ban đầu, vì vậy nó là một dạng xem.
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 số chính xác cho một trong các kích thước trong phương pháp định hình lại.
Chuyển -1
làm giá trị và NumPy sẽ tính con số này cho bạn.
Ví dụ
Chuyển đổi mảng 1D có 8 phần tử thành mảng 3D có phần tử 2x2:
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8])
newarr = arr.reshape(2, 2, -1)
print(newarr)
Hãy tự mình thử » Lưu ý: Chúng ta không thể chuyển -1
cho nhiều chiều.
Làm phẳng các mảng
Làm phẳng mảng có nghĩa là chuyển đổi một mảng nhiều chiều thành mảng 1D.
Chúng ta có thể sử dụng reshape(-1)
để thực hiện việc này.
Ví dụ
Chuyển đổi 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)
Hãy tự mình thử » Lưu ý: Có rất nhiều hàm để thay đổi hình dạng của mảng trong numpy flatten
, ravel
và cũng để sắp xếp lại các phần tử rot90
, flip
, fliplr
, flipud
, v.v. Những hàm này nằm trong phần Trung cấp đến Nâng cao của numpy.