我有一个 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)]
...
最佳答案
您可以通过一个简单的循环来完成此操作,请注意 loops aren't necessarily slow在较新的 MATLAB 版本中。里程可能会有所不同。
循环的优点是提高代码可读性,这里发生的事情非常清楚:
% For matrix A of size N*N*4
C = zeros( size( A ) );
for ii = 1:N
for jj = 1:N
C( ii, jj, : ) = B * reshape( A( ii, jj, : ), [], 1 );
end
end
关于matlab - 3D 矩阵乘以 2D 矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53883213/