如何在不使用repmat函数的情况下复制矩阵的元素

时间:2015-03-04 06:24:50

标签: matlab

给定矩阵I = [1,2;3,4],我想复制元素以创建矩阵I2,以便:

I2 = [1 1 1 2 2 2
      1 1 1 2 2 2
      1 1 1 2 2 2
      3 3 3 4 4 4 
      3 3 3 4 4 4
      3 3 3 4 4 4]

除了使用repmat之外,还有哪些其他方法或功能可用?

3 个答案:

答案 0 :(得分:7)

使用kron

>> N = 3 %// Number of times to replicate a number in each dimension
>> I = [1,2;3,4];
>> kron(I, ones(N))

ans =

     1     1     1     2     2     2
     1     1     1     2     2     2
     1     1     1     2     2     2
     3     3     3     4     4     4
     3     3     3     4     4     4
     3     3     3     4     4     4

如果你不知道kron做了什么,这可能值得一些解释。 kron代表Kronecker Tensor Product。大小为kron且大小为A的{​​{1}}的两个矩阵m x n之间的B会创建一个大小为p x q的输出矩阵,以便:

因此,对于mp x nq中的每个系数,我们取这个值,将其与矩阵A中的每个值相乘,我们将这些矩阵按照我们在{{1}中看到的顺序排列}。因此,如果我们让BA为3 x 3矩阵,那么就可以获得上述结果。

答案 1 :(得分:4)

使用索引:

I = [1, 2; 3, 4];                                           %// original matrix
n = 3;                                                      %// repetition factor
I2 = I(ceil(1/n:1/n:size(I,1)), ceil(1/n:1/n:size(I,2)));   %// result

答案 2 :(得分:3)

bsxfun的单行 -

R = 3; %// Number of replications
I2 = reshape(bsxfun(@plus,permute(I,[3 1 4 2]),zeros(R,1,R)),R*size(I,1),[])

示例运行 -

I =
     3     2     5
     9     8     9
I2 =
     3     3     3     2     2     2     5     5     5
     3     3     3     2     2     2     5     5     5
     3     3     3     2     2     2     5     5     5
     9     9     9     8     8     8     9     9     9
     9     9     9     8     8     8     9     9     9
     9     9     9     8     8     8     9     9     9