Matlab 外积计算的矢量化

Matlab 外积计算的矢量化,matlab,vectorization,matrix-multiplication,Matlab,Vectorization,Matrix Multiplication,我有一个矩阵a,大小KxN。我想在矩阵的每一列之间取外积,创建一个大小为KxKxN的新矩阵。我可以通过执行以下操作来迭代执行此操作: N = 5; K = 3; A = rand(K,N); nA = zeros(K,K,N); for n=1:N nA(:,:,n) = nA(:,:,n) + A(:,n)*A(:,n)'; end 或者通过编写mex文件(当N较大时)更快。然而,我还没有弄清楚我是否可以用矢量化的方式来实现这一点。有什么想法吗?如果您将数组重新调整为大小[K,

我有一个矩阵
a
,大小
KxN
。我想在矩阵的每一列之间取外积,创建一个大小为
KxKxN
的新矩阵。我可以通过执行以下操作来迭代执行此操作:

N = 5;
K = 3;

A = rand(K,N);

nA = zeros(K,K,N); 
for n=1:N
    nA(:,:,n) = nA(:,:,n) + A(:,n)*A(:,n)';
end

或者通过编写mex文件(当
N
较大时)更快。然而,我还没有弄清楚我是否可以用矢量化的方式来实现这一点。有什么想法吗?

如果您将数组重新调整为大小
[K,1,N]
[1,K,N]
(即在适当的位置注入单态维度),您只需要使用数组广播将它们相乘

具有隐式广播功能的较新版本的MATLAB:

nA_bcast = reshape(A,[1,K,N]).*reshape(A,[K,1,N])
借助于
bsxfun
,旧版本的MATLAB:

nA_bsxfun = bsxfun(@times, reshape(A,[1,K,N]),reshape(A,[K,1,N]))

三个相关数组(即
nA
nA_bcast
nA_bsxfun
)都是相同的。旁注:
A'
将是伴随词,您可能是指转置的
A.

谢谢!很好的回答。@ SMAJJK我很高兴有帮助:如果上面确实解决了你的问题,请考虑把我的答案标记为接受。