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我很高兴有帮助:如果上面确实解决了你的问题,请考虑把我的答案标记为接受。