如何进行快速的多维矩阵向量乘法?
How to do a fast multidimensional matrix vector multiplication?
A
是一个3D的N*N*L矩阵,x
是一个N*1的向量,我需要对其进行如下操作:
for i=1:L
res(i)=x'*squeeze(A(:,:,i))*x
end
我希望使用最有效的向量化方法而不是 for
循环。请有人给我一些建议吗?
与bsxfun
-
sum(reshape(bsxfun(@times,x,bsxfun(@times,A,x.')),[],L),1)
与matrix-multiplication-fun
-
reshape(x*x.',1,[])*reshape(A,[],L)
N=10;L=5;
A = rand(N,N,L);x=rand(N,1);
C = sum(sum(bsxfun(@times,permute(bsxfun(@times,permute(A,[3 1 2]),reshape(x,[1 1 N])),[1 3 2]),reshape(x,[1 1 N])),2),2);
C = squeeze(C(:,1,:));
感谢@AndrasDeak,尽管您确实错过了最后一个 squeeze
电话。
A
是一个3D的N*N*L矩阵,x
是一个N*1的向量,我需要对其进行如下操作:
for i=1:L
res(i)=x'*squeeze(A(:,:,i))*x
end
我希望使用最有效的向量化方法而不是 for
循环。请有人给我一些建议吗?
与bsxfun
-
sum(reshape(bsxfun(@times,x,bsxfun(@times,A,x.')),[],L),1)
与matrix-multiplication-fun
-
reshape(x*x.',1,[])*reshape(A,[],L)
N=10;L=5;
A = rand(N,N,L);x=rand(N,1);
C = sum(sum(bsxfun(@times,permute(bsxfun(@times,permute(A,[3 1 2]),reshape(x,[1 1 N])),[1 3 2]),reshape(x,[1 1 N])),2),2);
C = squeeze(C(:,1,:));
感谢@AndrasDeak,尽管您确实错过了最后一个 squeeze
电话。