我有一个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)]
答案 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