2012-02-14 7 views
3

に私はMathWorks社のMATLABで私のプロジェクトに取り組んでいると私はこのような二つの行列を結合する必要があります。はAから最初の要素を選択し、2つの行列AとBを結合し、第二Bから、MATLAB

AとBは16です* 50行列

私の新しい行列Cはこのようでなければなりません:

C = 

A(1,1) A(1,2) ... A(1,50) 

B(1,1) B(1,2) ... B(1,50) 

A(2,1) A(2,2) ... A(2,50) 

B(2,1) B(2,2) ... B(2,50) 

.  .   . 

.  .   . 

.  .   . 

A(16,1) A(16,2) ... A(16,50) 

B(16,2) B(16,2) ... B(16,50) 

私はあなたがこのくださいhelp.Thankを行うことができますどのように。

答えて

5

まず、@ woodchipsの答えを読んでください。MATLABがメモリにどのように配列を格納するのかを知ることが重要です。いずれの場合においても

、私はのために行くだろう:これらのアプローチは、要素を再順序付け避けるので

C = zeros(2,16,50); 
C(1,:) = A(:); 
C(2,:) = B(:); 
C = reshape(C, 32, 50); 

または

C = zeros(32,50); 
C(1:2:end,:) = A; 
C(2:2:end,:) = B; 

+0

あなたに助けてくれてありがとうございます。 私はこのようにしています: C = []; (h、t)= A(((h + 1)/ 2)、t); t = 1:50の場合には となる。 端端kについて = 1:L 50 = 2:2:32 C(L、K)= B((L/2)、L)。 end end –

+0

私はすべての答えを試しました!結果は私のものと同じです。ありがとうございます。あなたの答えは短いです。 –

+1

私はここで第2の提案が好きです。他の提案よりも、あなたがやろうとしていることがはっきりしていると思います。それは私がやることです。 – Matt

4

配列要素がメモリ内のどこにあるのか、そして変形、置換などのツールがそれらの要素をどのように操作するかを視覚化する方法を学びます。

まず、2つの行列を互いに重ね合わせるだけでいいですか?もちろん[A; B]で十分です。

結果にreshapeを使用した場合はどうなりますか?そうですね...

reshape([A;B],[16,2,50]) 

次に、permuteを適用するとどうなりますか?

permute(reshape([A;B],[16,2,50]),[2 1 3]) 

私たちは近づいていますか?もしあなたがその結果の形を変えたら? (可読性のあるコードは、来月または来年にデバッグする必要があるときに非常に重要です。重要なのは、コードブロックが何をするかを示すコメント行です。 )

% interleave the rows of matrices A and B to create C 
C = reshape([A;B],[16,2,50]) 
C = permute(C,[2 1 3]); 
C = reshape(C,[32,50]); 

重要なことは、あなたの目標を念頭に置いてあなたの要素をメモリ内で動かすために、matlabのツールを使うことを学ぶことです。あなたが終わる前に、それらのコメントを忘れないでください。簡単にコードを読むことは、簡単にデバッグされたコードです。私が提案した1行のコメントがあなたにとって不十分な場合は、さらに行を追加してください。コメントは事実上無料です!彼らは何秒も費やすことはありません。実行する時間はありませんが、あなたのコードははるかに向上します。

+0

ありがとうございました。 私はこのようにしています: C = []; (h、t)= A(((h + 1)/ 2)、t); t = 1:50の場合には となる。 端端kについて = 1:L 50 = 2:2:32 C(L、K)= B((L/2)、L)。 end end –

+1

ARGH !!!!これは確かにそれを行うかもしれませんが、それはあなたが私が言ったことから何も学んでいないことを意味します。私の応答をもう一度読んでください。matlabでループとネストループを作成すると、非効率的で不要なコードを書くことがよくあります。さて、この問題ではそれほど大きな違いはないかもしれませんが、あなたの次の問題にはそれがあります。ポイントは、どのように要素がMATLABに格納されているか、効率的にそれらを移動する方法を学ぶことです。 –

+0

いいえ、私はあなたの答えを理解しました。私が書いた答えは非効率的でした。それは私があなたに尋ねた理由です: –

関連する問題