Matlab。按顺序重复行n次

时间:2013-07-08 08:58:11

标签: matlab row

嘿我想做类似以下的事情

A = [...
   1 2 3
   4 5 6
   7 8 9]

B = [...
   1 2 3
   1 2 3
   1 2 3
   4 5 6
   4 5 6
   4 5 6
   7 8 9
   7 8 9
   7 8 9]

但请不要建议手动的东西。我正在编写一个带输入和矩阵尺寸的算法可能会改变。

2 个答案:

答案 0 :(得分:3)

有几种方法。我认为最简单的方法是使用Kronecker product

B = kron(A, ones(3,1))

更快但不太可读的解决方案是通过乘法和重新整形进行复制:

B = reshape((A(:) * ones(1,3))', 3*size(A,1),size(A,2))

或相同的解决方案,但随后使用repmat

B = reshape(repmat(A(:).',3,1), 3*size(A,1),size(A,2))

答案 1 :(得分:0)

您还可以根据以下内容尝试:

a = [1 2 3]
b = [4 5 6]
c = [7 8 9]

d = [ a; a; b; b; c; c]

e = [ repmat([a], [2, 1]) ;
      repmat([b], [2, 1]) ;
      repmat([c], [2, 1]) ] 

de都会产生以下矩阵:

=

1   2   3
1   2   3
4   5   6
4   5   6
7   8   9
7   8   9

要附加更多行,您还可以使用此for循环查看结果:

 e = [] 
 for i = 1:2    
      e = [ e;
            repmat([a], [2, 1]) ;
            repmat([b], [2, 1]) ;
            repmat([c], [2, 1]) ]  
 end