【问题标题】:Replicate Element-wise in matrix [duplicate]在矩阵中按元素复制[重复]
【发布时间】:2014-06-28 19:21:05
【问题描述】:

假设,我有: A=[1 2; 3 4];

我想使用返回的 repmat:

B = [1 1 2 2; 1 1 2 2; 3 3 4 4; 3 3 4 4]

请您帮忙。谢谢

【问题讨论】:

    标签: arrays matlab


    【解决方案1】:

    我不知道使用repmat 的方法,但这里是使用kron 的方法

    kron([1 2 ; 3 4],[1 1;1 1])
    
    ans =
    
     1     1     2     2
     1     1     2     2
     3     3     4     4
     3     3     4     4
    

    【讨论】:

      【解决方案2】:

      使用repmat 的替代方法是

      A=[1 2; 3 4];
      cell2mat(arrayfun(@(x)repmat(x,2,2),A,'UniformOutput',false))
      
      ans =
      
       1     1     2     2
       1     1     2     2
       3     3     4     4
       3     3     4     4
      

      arrayfun 用于使用匿名函数 @(x)repmat(x,2,2) 评估 A 中的每个元素,该函数将单个元素复制到 2x2 矩阵中。

      arrayfun 的结果是一个 2x2 元胞数组,其中每个元素都是一个 2x2 矩阵。然后,我们通过cell2mat 将此元胞数组转换为矩阵。

      【讨论】:

        【解决方案3】:

        让数据定义为

        A = [1 2; 3 4];
        R = 2; %// number of repetitions of each row
        C = 2; %// number of repetitions of each column. May be different from R
        

        两种可能的方法如下:

        1. 最简单的方法是使用索引:

          B = A(ceil(1/R:1/R:size(A,1)), ceil(1/C:1/C:size(A,2)));
          
        2. 如果你真的想用repmat 来做,你需要使用permutereshape 来处理尺寸:将原始尺寸1、2 移动到尺寸2、4 (permute);沿新维度 1、3 (repmat) 进行重复;将维度 1、2 折叠到一个维度,将 3、4 折叠到另一个维度 (reshape):

          [r c] = size(A);
          B = reshape(repmat(permute(A, [3 1 4 2]), [R 1 C 1]), [r*R c*C]);
          

        R=2C=3 的示例结果(通过两种方法中的任何一种获得):

        B =
             1     1     1     2     2     2
             1     1     1     2     2     2
             3     3     3     4     4     4
             3     3     3     4     4     4
        

        【讨论】:

          猜你喜欢
          • 2021-09-19
          • 1970-01-01
          • 2021-02-15
          • 1970-01-01
          • 2017-03-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-08-30
          相关资源
          最近更新 更多