2013-07-08 52 views
1

嘿,我想這樣做以下Matlab.Copying行n次,以

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] 

但請不要的諮詢手冊東西。我正在寫一個帶有輸入的算法,並且矩陣的維度可能會改變

回答

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)) 
+0

+1你打在30秒內... – bla

+0

謝謝你,克朗工作得很好。 – user2560068

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 

要追加更多行,你也可以用這個循環,看看結果是什麼:

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