Matlab 将二维矩阵与三维张量相乘
我有一个三维张量a,大小(a)=[2N]。 我想得到2x2矩阵的乘积:Matlab 将二维矩阵与三维张量相乘,matlab,vectorization,Matlab,Vectorization,我有一个三维张量a,大小(a)=[2N]。 我想得到2x2矩阵的乘积: result=A(:,:,N)*A(:,:,N-1)*...*A(:,:,1) 这可以通过for循环完成: result=A(:,:,N); for i=(N-1):-1:1 result=result*A(:,:,i); end; 但是如何对这个操作进行矢量化呢?这不能用标准的Matlab进行矢量化。然而,一些Mathworks工程师发布了一个修改后的mtimes的非常快速的MEX实现,称为mtimesx,它确实支
result=A(:,:,N)*A(:,:,N-1)*...*A(:,:,1)
这可以通过for循环完成:
result=A(:,:,N);
for i=(N-1):-1:1
result=result*A(:,:,i);
end;
但是如何对这个操作进行矢量化呢?这不能用标准的Matlab进行矢量化。然而,一些Mathworks工程师发布了一个修改后的
mtimes
的非常快速的MEX实现,称为mtimesx
,它确实支持您想要做的事情(以及更多)。请参阅文档中的:
如果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,i,i,j),i=1:4,j=1:5
,相当于MATLAB m-code:
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
你确定它可以矢量化吗?“我真的很怀疑。”我们走路的方式不,我不确定。但我似乎只需要稍微修改一下prod函数。不,这不仅仅是对
prod
的稍微修改。元素矩阵乘法和实矩阵乘法是完全不同的。我同意patrik的观点,在这种情况下,for循环是一个很好的选择。不,我怀疑它会起作用。prod
功能只会将每个维度相同位置的元素相乘。例如,A
是2x2x3矩阵。prod(A,3)
的输出为sum=one(2);对于k=1:3,sum=sum.*A(:,:,k);结束
感谢您的回复,我将继续使用fro loop