在矩阵中复制元素

时间:2014-06-28 19:21:06

标签: arrays matlab

让我们说,我有: A=[1 2; 3 4];

我想使用返回的repmat:

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

请帮助你。谢谢

3 个答案:

答案 0 :(得分:4)

我不知道使用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

答案 1 :(得分:0)

使用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用于使用匿名函数A评估@(x)repmat(x,2,2)中的每个元素,该函数将该单个元素复制到2x2矩阵中。

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

答案 2 :(得分:0)

将数据定义为

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]);
    
  3. 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