如何将向量乘以3次以得到3维矩阵

时间:2016-11-28 13:30:18

标签: arrays matlab multidimensional-array matrix-multiplication

假设我有一个向量B = [1; 2; 3]。然后

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

现在,我需要将新矩阵B*B'再次与B相乘,以获得以下3维矩阵C

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]

任何想法我该怎么做?

(我的原始矢量很长,所以我不能手动执行此操作..)

3 个答案:

答案 0 :(得分:4)

在R2016b之前:

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

在R2016b之后:

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

答案 1 :(得分:3)

您可以使用typer.py执行这些操作。

bsxfun

或者如果你想让它更清晰,你可以把它分成两个操作。首先执行第一次乘法。

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

然后再将其乘以tmp = bsxfun(@times, B, B.'); (但我们将B重新设为B以使结果成为3D矩阵)

1 x 1 x 3

如果您使用的是R2016b或更高版本,则可以执行以下操作。

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

答案 2 :(得分:1)

另一种形式是将第一个矩阵乘法的结果重新整形为一列,执行第二次矩阵乘法,并重新整形结果:

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