外积计算向量化
Vectorization of outer product calculation
我有一个大小为 KxN
的矩阵 A
。我想将该矩阵的每一列之间的外积与自身相乘,创建一个大小为 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])
旧版本的 MATLAB 借助 bsxfun
:
nA_bsxfun = bsxfun(@times, reshape(A,[1,K,N]),reshape(A,[K,1,N]))
三个相关的数组(即nA
、nA_bcast
和nA_bsxfun
)都是一样的。旁注:A'
将是伴随词,您可能指的是 A.'
转置。
我有一个大小为 KxN
的矩阵 A
。我想将该矩阵的每一列之间的外积与自身相乘,创建一个大小为 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])
旧版本的 MATLAB 借助 bsxfun
:
nA_bsxfun = bsxfun(@times, reshape(A,[1,K,N]),reshape(A,[K,1,N]))
三个相关的数组(即nA
、nA_bcast
和nA_bsxfun
)都是一样的。旁注:A'
将是伴随词,您可能指的是 A.'
转置。