2017-11-08 3 views
1

私は3つの小さな行列を(多次元配列で)すべてが4x4です。私は小さな行列ごとにもっと大きな行列(8x8)を作成したいが、小さな行列の各要素の位置を、より大きな行列の新しい位置に並べ替えることが、ユーザー行列入力によると、ユーザ入力によるより小さい行列から大きな行列への要素の割り当て

たとえば、それら3つの小さな行列:

A=repmat(1, [4 4]); 
B=repmat(2, [4 4]); 
C=repmat(3, [4 4]); 

と大きい方K=zeros(8);。ユーザ入力行列は、この一つである:

user=[1 2 7 8; 3 4 1 2; 3 4 7 8]; 

したがって、最初の大きな行列が構成必要があります:赤の数字は、その結果、より大きな行列に新しい行と列である

enter image description here

をこの中でKのために:どのように

enter image description here

私が挿入することができますこのように小さな行列から大きな行列への値?

+0

'user'の2行目と3行目で何をすべきですか? – gnovice

答えて

0

これがなぜ必要なのかはっきりしませんが、これは私が考えた解決策です。

K = zeros(8,8); 
for ii=1:4 
    for jj=1:4 
     K(user(1,ii),user(1,jj)) = A(ii,jj); 
     K(user(2,ii),user(2,jj)) = B(ii,jj); 
     K(user(3,ii),user(3,jj)) = C(ii,jj); 
    end 
end 
+0

それは私が適応しなければならない数学的方法のためです。それを反復的にする方法はありますか?あなたのコードは動作しますが、3つではなくn個の行列に適応できるかどうかを知りたいのです。 –

+0

コードを一般化して、N個の行列A、B、Cなどを3D行列( 'キューブ' )と3番目の次元( 'z = 1 ... N')に渡るもう一つのforループとの比較を示します。内線は 'K(user(1、ii)、user(1、jj))= cube(ii、jj、z)'で置き換えることができます。 3つのネストされたループでのパフォーマンスについてはわかりませんが、より良い回答のための十分な情報がありません。 – m3tho

0

あなたは簡単にそうように、Kに行と列のインデックスとしてuserの行を使用してこれを行うことができます。

K(user(1, :), user(1, :)) = A; 

あなたがそれぞれ小さなマトリックスと、ユーザの入力を反復処理したい場合は、

smallMats = {A, B, C}; 
K = zeros(8); 
for row = 1:size(user, 1) 
    K(user(row, :), user(row, :)) = smallMats{row}; 
end 
01:同じ大きな行列 Kにそれらのすべてを挿入し、私は最初、単に for loopに上記を繰り返し、単一 cell arrayに小さい行列を置くところ

これは、usersmallMatsに追加することで、より多くの行列に簡単に拡張できます。

関連する問題