我有一个3d张量A,大小(A)= [2 2 N]。 我想得到2x2矩阵的乘积:
result=A(:,:,N)*A(:,:,N-1)*...*A(:,:,1)
这可以通过for循环完成:
result=A(:,:,N);
for i=(N-1):-1:1
result=result*A(:,:,i);
end;
但是如何进行矢量化操作呢?
答案 0 :(得分:1)
这不能用标准的Matlab进行矢量化。但是,一些Mathworks工程师发布了一个非常快速的MEX实现,修改后的mtimes
被称为mtimesx
,其中 支持您想要做的事情(以及更多) 。请参阅文档中的MTIMESX - Fast Matrix Multiply with Multi-Dimensional Support:
如果
A
为(2,3,4,5)
且B
为(3,6,4,5)
,那么mtimesx(A,B)
会产生C(2,6,4,5)
,其中C(:,:,i,j) = A(:,:,i,j) * B(:,:,i,j), i=1:4, j=1:5
将等同于MATLAB m代码:C = zeros(2,6,4,5); for m=1:4 for n=1:5 C(:,:,m,n) = A(:,:,m,n) * B(:,:,m,n); end end