我想垂直连接不同尺寸的多个矩阵: 180 x n double n> = 7 。为了使这些矩阵具有相同的尺寸,我想将0填充为填充物。但是,有一点需要注意:填充程序必须在每个原始文本的最后7列之前,这意味着在连接之后,最后7列(从右侧)始终保持不变。这是一个连接3个矩阵的例子:
R1 is 180 x 13 double
R2 is 180 x 7 double
R3 is 180 x 10 double
我想创建R_concat = 540 x 13 double
(540 = 180x3,13是三个待连接矩阵中最高的列数)。因此,必须填充少于13列的新矩阵以具有13列。由于R1具有最高列数,因此不需要填充。对于R2,需要额外增加6列零(180x6更精确)。这些列必须作为前6列添加,因此将跟随7个原始列。对于R3,需要3个额外的零列,但这些额外的列将介于原始的3列和4列之间。这样,原始的7个最后一列(即第4列到第10列)仍然是新矩阵中的最后7列(但现在它们将是第6列到第13列)。
如果这种解释有点笨拙,我很抱歉。有人可以帮忙吗?
答案 0 :(得分:2)
*将矩阵放入单元格数组
*使用cellfun
对每个矩阵应用填充
*使用cell2mat
连接矩阵
%place matrices into a cell
matrices = {rand(5,13),rand(5,7),rand(5,10)};
% column number that padding should be applied before it
pad_column = 7;
%find maxmum of number of columns of matrices
sz=cellfun('size',matrices,2);
mx = max(sz);
%pad each matrix
padded = cellfun(...
@(M)...
[...
M(:,1:end-pad_column),...
zeros(size(M,1),mx-size(M,2)),...
M(:,end-pad_column+1:end)...
],...
matrices,...
'UniformOutput', false...
);
%concatenate matrices
out = cell2mat(padded.');