从3d张量乘以2d矩阵

时间:2015-03-18 10:12:44

标签: matlab vectorization

我有一个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;

但是如何进行矢量化操作呢?

1 个答案:

答案 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