[英]3D matrix multiplication by 2D matrix
我有一個 NxNx4 矩陣( A
)和一個 4x4 矩陣( B
)。 我需要乘以由第一個矩陣A
的四個元素組成的向量a
,比方說
a = A(1,1,1)
A(1,1,2)
A(1,1,3)
A(1,1,4)
通過 4x4 矩陣B
但我不確定是否有比使用for
循環構建向量a
更快更聰明的解決方案。 是否存在一種用幾行代碼進行計算的方法?
我建立了A
喜歡
A(:,:,1) = rand(20);
A(:,:,2) = rand(20);
A(:,:,3) = rand(20);
A(:,:,4) = rand(20);
和矩陣B
B = rand(4);
現在我想乘以B
B*[A(1,1,1);A(1,1,2);A(1,1,3);A(1,1,4)]
這對於 A 的每個元素
B*[A(1,2,1);A(1,2,2);A(1,2,3);A(1,2,4)]
B*[A(1,3,1);A(1,3,2);A(1,3,3);A(1,3,4)]
...
特別是當 N 很大時具有良好性能的循環解決方案:
s = size(A, 3);
C = A(:,:,1) .* reshape(B(:,1),1,1,[]);
for k = 2:s
C = C + A(:,:,k) .* reshape(B(:,k),1,1,[]);
end
我認為這可以滿足您的要求:
C = permute(sum(bsxfun(@times, permute(B, [3 4 2 1]), A), 3), [1 2 4 3]);
查看:
>> C(1,2,:)
ans(:,:,1) =
1.501739582138850
ans(:,:,2) =
1.399465238902816
ans(:,:,3) =
0.715531734553844
ans(:,:,4) =
1.617019921519029
>> B*[A(1,2,1);A(1,2,2);A(1,2,3);A(1,2,4)]
ans =
1.501739582138850
1.399465238902816
0.715531734553844
1.617019921519029
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.