Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 将二维矩阵与三维张量相乘_Matlab_Vectorization - Fatal编程技术网

Matlab 将二维矩阵与三维张量相乘

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,它确实支

我有一个三维张量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
,它确实支持您想要做的事情(以及更多)。请参阅文档中的:

如果
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