reshape

屬於MATLAB函數的編程語言

reshape函數重新調整矩陣的行數、列數、維數。在matlab命令窗口中鍵入doc reshape或help reshape即可獲得該函數的幫助信息。

函數簡介


調用格式:
B = reshape(A,m,n)
返回一個m*n的矩陣B, B中元素是按列從A中得到的。如果A中元素個數沒有m*n個,則會引發錯誤。
B = reshape(A,m,n,p,...)和B = reshape(A,[m n p ...])
返回一個和A具有相同元素的N(不是上面的參數n)維數組。但B的尺寸是m*n*p*...,m*n*p*...必須和prod(size(A))相等。即A和B元素個數相等。
B = reshape(A,...,[ ],...)
計算由佔位符[ ]所表示的尺寸的長度,這樣維度的乘積等價於prod(size(A))。而prod(size(A))的值必須能被的指定維數的乘積所整除。在這裡面佔位符[ ] 只能使用一次。
B = reshape(A,siz)
返回一個和A元素相同的n維數組,但是由向量siz來決定重構數組維數的大小,prod(siz)的數量值必須和prod(size(A))的保持一致。
相關函數: shiftdim, squeeze, circshift, permute, repmat

程序示例


close all; clear; clc;
A = [1 2 3; 4 5 6; 7 8 9; 10 11 12] % 4 by 3
B = reshape(A, 2, 6) % 2 by 6
% C = reshape(A, 2, 4) % error
% D = reshape(A, 2, 10) % error
E = reshape(A, 2, 3, 2) % 2 by 3 by 2
注意:reshape函數對原數組的抽取是按照列抽取的(對原數組按列抽取,抽取的元素填充為新數組的列)
運行結果:
A =
1 2 3
4 5 6
7 8 9
10 11 12
B =
1 7 2 8 3 9
4 10 5 11 6 12
E(:,:,1) =
1 7 2
4 10 5
E(:,:,2) =
8 3 9
11 6 12

延伸拓展


repmat函數與reshape函數功能比較:
(1)repmat函數
repmat函數主要是用於快速的產生一個矩陣,它的用法一般有下面幾種:
B = repmat(A,M,N)
矩陣B是矩陣A的複製品,其中B的維度為[size(A,1)*M, size(A,2)*N]。寫成repmat(A,[M,N])也是可以的;如果寫成repmat(A,N),那麼它等價於repmat(A,N,N)或者repmat(A,[N,N])。
(2)示例
repmat(magic(2),2)
ans =