Đị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 -1
dướ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à flatten
cũng ravel
để sắp xếp lại các phần tử , rot90
v.v. Các hàm này nằm trong phần Trung cấp đến Nâng cao của numpy.flip
fliplr
flipud