如何乘以一个向量3次得到3维矩阵
问题描述:
假设我有一个向量B = [1; 2; 3]
。然后如何乘以一个向量3次得到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]
任何想法,我该怎么办呢?
(我原来的载体是长,所以我不能手动做到这一点..)
答
R2016b之前:
C = bsxfun(@times, permute(B, [3 2 1]), B*B');
后R2016b:
C = permute(B, [3 2 1]) .* (B*B');
答
您可以使用bsxfun
执行这些操作。
out = bsxfun(@times, bsxfun(@times, B, B.'), reshape(B, 1, 1, []));
或者,如果您想让它更清晰易读,可以将其分解为两个操作。首先执行第一次乘法。
然后通过B
再乘以这个(但我们重塑B
是1 x 1 x 3
使结果的3D矩阵)
out = bsxfun(@times, reshape(B, 1, 1, []));
如果你在R2016b或更高版本,你可以做的以下。
out = (B .* B.') .* reshape(B, 1, 1, []);
答
另一种形式是,以第一矩阵乘法的结果重塑成一列,执行第二矩阵乘法,和重塑结果:
C = reshape(B*reshape(B*B.',1,[]),numel(B)*[1 1 1]);
@zeeMonkeez谢谢,编辑 –