2016-08-27 11 views
0

私はまたMATLAB:行列のアレイを形成し、各行列「要素」に対して操作を行う

v = [1 2 3]; 

ようなベクターを有するように

m1 = [1 2;3 4]; 
    m2 = [2 7; 8 9]; 
    m3 = [9 7; 8 91]; 
    m = [m1 m2 m3] 


m = 
     1  2  2  7  9  7 
     3  4  8  9  8 91 

行列Mのアレイを有します私はvとmの間の演算でhが得られるようにします

h = [1*m1 2*m2 3*m3] = [h1 h2 h3]; 

私はこれを3次元hの配列.3次元配列です。あるいは、より良い方法があるかもしれません。

単純な2行2列の行列Aをrand(2,2)とします。 hから 私はh1h2h3アウト(またはより良い任意の抽出を行っていない)を抽出し、A

1.

h1*A*h1' 
    h2*A*h2' 
    h3*A*h3' 

2.

それに操作を実行したいです
h1*h1', h2*h2', h3*h3'. 

なぜ私は配列でこれをしたいですか?私は行列をたくさん持っているので、ベクトル化によってループを避けたい。

+0

「m」2x2x3を2x6の上に重ねることをお勧めします。それはあなたの問題を解決するでしょうか?私はそれが助けるが、bsxfun(またはそのようなもの)のコマンドを見ているか分からない。あなたの乗算のためにforループを過小評価してはいけませんが、ベクトル化するのはいつも楽しいです;) – chessofnerd

答えて

0

私は質問から理解できるものから、私は要素的な乗算がより良い選択であると考えます。適切な連結と行列の繰り返しを使用するだけです。

m1 = [1 2; 3 4]; 
    m2 = [2 7; 8 9]; 
    m3 = [9 7; 8 91]; 

    % Concatenate to create 3D matrix 
    m = cat(3,m1,m2,m3); 

    v = [1 2 3]; 

    % Create similar 3D matrix 
    v1 = cat(3,ones(size(m1))*v(1),ones(size(m2))*v(2),ones(size(m3))*v(3)); 

    % Simple element wise multiplication 
    h = m.*v1; 

    % Creating a repeated 3D matrix A, repetation is along third dimension 
    A = repmat(rand(2,2),[1 1 3]); 

    % Outputs 
    op_1 = h.*A.*permute(h,[2 1 3]); 
    op_2 = h.*permute(h,[2 1 3]); 
関連する問題