2013-04-28 17 views
7

私はかなり初心者ですので、簡単なやり方でやりたいと思うかもしれません。 私は行列121x62を持っていますが、それを121x1488に拡張して、すべての列を24回繰り返す必要があります。すべての列でMatlab:すべての列を連続してn回繰り返します

2.2668  2.2668  2.2668 and so on to 24th  2.2667  2.2667 and again to 24x 
2.2582  2.2582  2.2582 ... 

:この中

2.2668  2.2667  2.2667  2.2666  2.2666  2.2666  
    2.2582  2.2582  2.2582  2.2582  2.2581  2.2581  
    2.283  2.283  2.283  2.2829  2.2829  2.2829  
    2.2881  2.2881  2.2881  2.2881  2.2881  2.288   
    2.268  2.268  2.2679  2.2679  2.2678  2.2678  
    2.2742  2.2742  2.2741  2.2741  2.2741  2.274  

:たとえば、これを変換します。

私は、これらの値を使用してベクトルを作成し、vec2matに変換しようとしましたが、[OK]を、私は121x1488行列を持っていますが、行単位で繰り返してきました:

2.2668 2.2668 2.2668 2.2668 2.2668 2.2668 ... 2.2582 2.2582 2.2582 2.2582 ... 

列でそれを行うにはどのように?

function [result] = repcolumn(A, n) 
    %n - how many times each column from A should be repeated 

    [rows columns] = size(A); 
    result = repmat(A(:,1),1,n); 

    for i = 2:columns 
     result = [result,repmat(A(:,i),1,n)]; 
    end 
end 

はもっと簡単な方法があるに違いありませんが、それは仕事をしていません。ここで

+0

を与えるあなたはvec2mat変換してコードを貼り付けてもらえますか? –

+0

GPT2 = repmat(ZHD_GPT2(:)、1,24);X = vec2mat(GPT2,1488); – papkin

答えて

0

あなたが行きます。

+0

ありがとうございます。それは十分にきれいで、動作します – papkin

22

は、あなたがこの簡略化入力があると仮定して、あなたは、列を展開したい順次n回:

A = [1 4 
     2 5 
     3 6]; 

szA = size(A); 
n = 3; 

それを行うには、いくつかの方法があります。

  • 複製は、その後、再構築は:

    reshape(repmat(A,n,1),szA(1),n*szA(2)) 
    
  • クロネッカー積:

    FEX: expand()を使用
    kron(A,ones(1,n)) 
    
  • R2015a、repelem()ので
    expand(A,[1 n]) 
    
  • repelem(A,1,n) 
    

すべて同じ結果をもたらします0

ans = 
    1  1  1  4  4  4 
    2  2  2  5  5  5 
    3  3  3  6  6  6 
+4

+1 kronの解決のため – Shai

+0

3つの解決策ありがとうございます。パフォーマンスに関する好みはありますか?実際、私はパフォーマンスを非常に重要にする大きなループでこれを行います。 –

+1

@AlirezaMirianレプリケートし直すと、最も速くなります。 – Oleg

1

完全性のためだけです。行に沿って複製する場合は、rectpulse()を使用することもできます。

A = [1,2,3;... 
    4,5,6]; 

n = 3; 

rectpulse(A, n); 

あなた

1 2 3 
1 2 3 
1 2 3 
4 5 6 
4 5 6 
4 5 6 
関連する問題