3D矩阵乘以2D矩阵

时间:2018-12-21 10:33:51

标签: matlab 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更快,更聪明的解决方案。是否存在用几行代码进行这种计算的方法?

我像{p1>

A

和矩阵A(:,:,1) = rand(20); A(:,:,2) = rand(20); A(:,:,3) = rand(20); A(:,:,4) = rand(20);

B

现在我想将B = rand(4); 乘以

B

对于A的每个元素

B*[A(1,1,1);A(1,1,2);A(1,1,3);A(1,1,4)]

3 个答案:

答案 0 :(得分:1)

您可以通过一个简单的循环来执行此操作,在较新的MATLAB版本中请注意loops aren't necessarily slow。里程可能会有所不同。

循环具有提高代码可读性的优势,这非常清楚这里发生的事情:

{items.map(item => {
  <li key={item.ibn}>
    Name: {item.name}  , Author: {item.author}
  </li> 
})}

答案 1 :(得分:1)

特别是在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

答案 2 :(得分:0)

我认为这可以满足您的要求

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