matlab - 外积计算的向量化

标签 matlab vectorization matrix-multiplication

我有一个大小为 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 很大时)。然而,我还没有弄清楚是否可以以矢量化的方式做到这一点。有什么想法吗?

最佳答案

如果将数组 reshape 为 [K,1,N][1,K,N] 大小(即在适当的位置注入(inject)单例维度),您只需使用数组广播将它们相乘即可。

具有隐式广播的新版 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]))

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

关于matlab - 外积计算的向量化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44295678/

相关文章:

matlab - 如何检查成本函数是凹函数还是凸函数?

file - 删除未使用的 .m 文件

gpu - AMD Polaris 上某些尺寸的矩阵乘法性能下降

c++ - opencv - 图像乘法

matlab - 两个图像之间的相似性度量

r - 用过去的迭代向量化移动窗口

python - 欧几里得距离的向量化实现

python - 重温嵌套的Python循环

python - python中的矩阵 split 和乘法

algorithm - 矩阵-矩阵乘法/矩阵-向量乘法有哪些不同类型的算法