2

ベクトルがB = [1; 2; 3]であると仮定します。私はそれをどのように行うことができます任意のアイデアベクトルを3倍して3次元行列を得る方法

C(:,:,1) = [1*1*1 1*2*1 1*3*1 ; 2*1*1 2*2*1 2*3*1 ; 3*1*1 3*2*1 3*3*1] 

C(:,:,2) = [1*1*2 1*2*2 1*3*2 ; 2*1*2 2*2*2 2*3*2 ; 3*1*2 3*2*2 3*3*2] 

C(:,:,3) = [1*1*3 1*2*3 1*3*3 ; 2*1*3 2*2*3 2*3*3 ; 3*1*3 3*2*3 3*3*3] 

:次に

B*B' = [1*1 1*2 1*3 ; 2*1 2*2 2*3 ; 3*1 3*2 3*3] 

は今、私は次の3次元マトリックスCを得るために、Bで再び新しい行列B*B'を乗算する必要がありますか?

は(私の元のベクトルが長いので、私はこれを手動で行うことはできません。)

答えて

4
R2016b前

C = bsxfun(@times, permute(B, [3 2 1]), B*B'); 

R2016b後:

C = permute(B, [3 2 1]) .* (B*B'); 
+0

@zeeMonkeezありがとう、編集中 –

3

をあなたはこれらの操作を実行するためにbsxfunを使用することができます。

out = bsxfun(@times, bsxfun(@times, B, B.'), reshape(B, 1, 1, [])); 

また、見やすくしたい場合は、2つの操作に分けることができます。最初に最初の乗算を実行します。

​​

その後、再びBことによって、これを掛ける(私たちは、結果の3Dマトリックス作るために1 x 1 x 3するBを再形成)

out = bsxfun(@times, reshape(B, 1, 1, [])); 

後でR2016bにしている場合や、あなただけ行うことができます以下。

out = (B .* B.') .* reshape(B, 1, 1, []); 
1

別の形態は、カラムに第1のマトリックス乗算の結果を再形成する第2の行列乗算を実行することであると結果を再構成します。

C = reshape(B*reshape(B*B.',1,[]),numel(B)*[1 1 1]); 
関連する問題