如何高效计算两个矩阵各列向量间所有外积的总和?
高效计算矩阵所有列向量对的外积之和
你要的运算完全可以通过矩阵求和+外积的方式实现,不需要嵌套循环,效率会比循环实现高得多,尤其是当矩阵维度较大时。
数学推导
假设A是p×n矩阵,B是p×m矩阵,它们的列向量分别为$a_1,a_2,...,a_n$和$b_1,b_2,...,b_m$(均为p×1列向量)。所有列向量对的外积之和可以利用加法分配律简化为:
$$\sum_{i=1}^n \sum_{j=1}^m a_i b_j^T = \left(\sum_{i=1}^n a_i\right) \left(\sum_{j=1}^m b_j\right)^T$$
本质是先分别求出A、B所有列向量的和,再对这两个和向量做一次外积运算。
实现代码(以MATLAB为例)
针对你的示例矩阵:
A = [1,2,3; 3,1,4; 4,1,3]; B = [2,1,3; 4,1,2; 3,2,1]; % 对A、B按列求和,得到列向量 sum_A = sum(A, 2); sum_B = sum(B, 2); % 计算外积,得到最终结果U U = sum_A * sum_B';
注意事项
你提供的示例代码中,A[:,n]'*B[:,m]是行向量×列向量,得到的是标量,这属于内积运算,和你描述的“外积”需求不符。如果确实要计算外积(得到矩阵),应该写成A[:,n] * B[:,m]',而上面的求和外积方法,正好对应修正后的循环逻辑。
效率对比
循环实现的时间复杂度是$O(nmp^2)$,而这个方法的时间复杂度是$O(p*(n+m))$,矩阵维度越大,效率差距越明显。
内容的提问来源于stack exchange,提问作者user48826
相关产品推荐
相关产品推荐

