如何只计算R中矩阵乘积的对角线

How to just calculate the diagonal of a matrix product in R

我有两个矩阵 AB,那么 just 计算 diag(A%*%B) 的最快方法是什么,即内部 - A的第行与B的第列的乘积,以及内部-其他条款的产品不关心.

补充:AB行号和列号分别较大

这可以在没有完全矩阵乘法的情况下完成,只使用矩阵元素的乘法。

我们需要将 A 的行乘以 B 的匹配列并对元素求和。 A 的行是 t(A) 的列,我们按元素乘以 B 并对列求和。

换句话说:colSums(t(A) * B)

测试我们首先创建示例数据的代码:

n = 5
m = 10000;

A = matrix(runif(n*m), n, m);
B = matrix(runif(n*m), m, n);

您的代码:

diag(A %*% B)
# [1] 2492.198 2474.869 2459.881 2509.018 2477.591

不用矩阵乘法直接计算:

colSums(t(A) * B)
# [1] 2492.198 2474.869 2459.881 2509.018 2477.591

结果是一样的