如何进行快速的多维矩阵向量乘法?

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 电话。