Để thay đổi kích thước của một mảng trong Python, hãy sử dụng phương pháp định hình lại của thư viện Numpy. reshape[a,d] Hàm định hình lại thay đổi kích thước của mảng mà không xóa các phần tử.reshape function changes the size of the array without deleting the elements. Ghi chú. Kích thước mới phải bằng tính điểm của mảng cũ. Ví dụ: nếu một vectơ có 10 phần tử, nó có thể được chuyển thành ma trận 5x2 hoặc 2x5. Nó không thể được tạo thành ma trận 3x3 hoặc bất cứ thứ gì khác.. The new size must equal
the cardinality of the old array. For example, if a vector has 10 elements, it can be transformed into a 5x2 or 2x5 matrix. It cannot be made into a 3x3 matrix or anything else.
Thí dụ
Ví dụ 1 [vectơ đến ma trận]
Tạo một mảng gồm 10 phần tử bằng phương thức mảng.array method.
Nhập Numpy dưới dạng NP X = NP.Array [[1,2,3,4,5,6,7,8,9,10]]]
x=np.array[[1,2,3,4,5,6,7,8,9,10]]
Mảng X mới có một kích thước. Nó là một vector.
Thay đổi mảng thành mảng 5x2 bằng cách sử dụng định hình lại chức năng.reshape.
y=np.reshape[x,[5,2]]
Mảng Y mới có hai chiều.
>>> mảng y [[[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]]]
array[[[ 1, 2],
[ 3, 4],
[ 5, 6],
[ 7, 8],
[ 9, 10]]]
Nó có các yếu tố tương tự như vector X nhưng được sắp xếp trong một ma trận.
Ví dụ 2
Để có được kết quả tương tự, hãy sử dụng định hình lại làm phương pháp.
y = x.reshape [[5,2]]
Kết quả cuối cùng là như nhau.
Ví dụ 3 [từ ma trận đến vector]
Tạo ma trận 2x5
Nhập Numpy dưới dạng NP X = NP.Array [[1,2,3,4,5], [6,7,8,9,10]]]]]
x=np.array[[[1,2,3,4,5],[6,7,8,9,10]]]
Mảng X có hai chiều
>>> x mảng [[[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]]]]
array[[[ 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10]]]
Chuyển đổi ma trận thành một vectơ.
z=np.reshape[x,10]
Mảng mới có một kích thước.
>>> Z mảng [[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]]]
array[[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]]
//how.okpedia.org/en/python/how-to-chtange-array-in-in-in-python
Trong Python, nếu đầu vào là một mảng numpy, bạn có thể sử dụng np.lib.pad
để pad zeros xung quanh nó -
import numpy as np
A = np.array[[[1, 2 ],[2, 3]]] # Input
A_new = np.lib.pad[A, [[0,1],[0,2]], 'constant', constant_values=[0]] # Output
Chạy mẫu -
In [7]: A # Input: A numpy array
Out[7]:
array[[[1, 2],
[2, 3]]]
In [8]: np.lib.pad[A, [[0,1],[0,2]], 'constant', constant_values=[0]]
Out[8]:
array[[[1, 2, 0, 0],
[2, 3, 0, 0],
[0, 0, 0, 0]]] # Zero padded numpy array
Nếu bạn không muốn thực hiện toán học về số 0 số không, bạn có thể để mã thực hiện nó cho bạn đã đưa ra kích thước mảng đầu ra -
In [29]: A
Out[29]:
array[[[1, 2],
[2, 3]]]
In [30]: new_shape = [3,4]
In [31]: shape_diff = np.array[new_shape] - np.array[A.shape]
In [32]: np.lib.pad[A, [[0,shape_diff[0]],[0,shape_diff[1]]],
'constant', constant_values=[0]]
Out[32]:
array[[[1, 2, 0, 0],
[2, 3, 0, 0],
[0, 0, 0, 0]]]
Hoặc, bạn có thể bắt đầu với một mảng đầu ra khởi tạo bằng không và sau đó đặt lại các phần tử đầu vào đó từ A
-
In [38]: A
Out[38]:
array[[[1, 2],
[2, 3]]]
In [39]: A_new = np.zeros[new_shape,dtype = A.dtype]
In [40]: A_new[0:A.shape[0],0:A.shape[1]] = A
In [41]: A_new
Out[41]:
array[[[1, 2, 0, 0],
[2, 3, 0, 0],
[0, 0, 0, 0]]]
Trong Matlab, bạn có thể sử dụng padarray
-
A_new = padarray[A,[1 2],'post']
Chạy mẫu -
>> A
A =
1 2
2 3
>> A_new = padarray[A,[1 2],'post']
A_new =
1 2 0 0
2 3 0 0
0 0 0 0
Trả về một mảng mới với hình dạng được chỉ định.
Nếu mảng mới lớn hơn mảng gốc, thì mảng mới được lấp đầy với các bản sao lặp lại của a. Lưu ý rằng hành vi này khác với a.resize [new_shape] lấp đầy bằng các số không thay vì các bản sao lặp lại của a.
Parametersaarray_likeaarray_likeMảng để được thay đổi kích thước.
new_shapeint hoặc tuple của intint or tuple of intHình dạng của mảng thay đổi kích thước.
Returnsreshaped_arrayndarrayreshaped_arrayndarrayMảng mới được hình thành từ dữ liệu trong mảng cũ, lặp lại nếu cần thiết để điền vào số lượng các phần tử cần thiết. Dữ liệu được lặp lại lặp lại trên mảng theo thứ tự C.
Ghi chú
Khi tổng kích thước của mảng không thay đổi
In [7]: A # Input: A numpy array
Out[7]:
array[[[1, 2],
[2, 3]]]
In [8]: np.lib.pad[A, [[0,1],[0,2]], 'constant', constant_values=[0]]
Out[8]:
array[[[1, 2, 0, 0],
[2, 3, 0, 0],
[0, 0, 0, 0]]] # Zero padded numpy array
0 nên được sử dụng. Trong hầu hết các trường hợp khác hoặc lập chỉ mục [để giảm kích thước] hoặc đệm [để tăng kích thước] có thể là một giải pháp phù hợp hơn.Cảnh báo: Chức năng này không xem xét các trục riêng biệt, tức là nó không áp dụng phép nội suy/ngoại suy. Nó lấp đầy mảng trả về với số lượng các phần tử cần thiết, lặp lại trên một thứ tự C, coi thường các trục [và đạp xe trở lại từ đầu nếu hình dạng mới lớn hơn]. Do đó, chức năng này không phù hợp để thay đổi kích thước hình ảnh hoặc dữ liệu trong đó mỗi trục đại diện cho một thực thể riêng biệt và riêng biệt.not consider axes separately, i.e. it does not apply interpolation/extrapolation. It fills the return array with the required number of elements, iterating over a in C-order, disregarding axes [and cycling back from the start if the new shape is larger]. This functionality is therefore not suitable to resize images, or data where each axis represents a separate and distinct entity.
Ví dụ
>>> a=np.array[[[0,1],[2,3]]] >>> np.resize[a,[2,3]] array[[[0, 1, 2], [3, 0, 1]]] >>> np.resize[a,[1,4]] array[[[0, 1, 2, 3]]] >>> np.resize[a,[2,4]] array[[[0, 1, 2, 3], [0, 1, 2, 3]]]