【问题标题】:Concatenate matrices of different dimensions with padding用填充连接不同维度的矩阵
【发布时间】:2016-10-05 22:47:15
【问题描述】:

我想垂直连接多个不同维度的矩阵:180 x n doublen >= 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 列)。

如果这个解释有点笨拙,我很抱歉。有人可以帮忙吗?

【问题讨论】:

    标签: matlab matrix concatenation


    【解决方案1】:

    *将矩阵放入元胞数组

    *使用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.');
    

    【讨论】:

      猜你喜欢
      • 2015-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多