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

时间:2017-03-03 02:42:40

标签: r matrix-multiplication

我有两个矩阵AB,那么只是计算diag(A%*%B)的最快方法是什么,即 A的{​​{1}}和 ith 列的{ith 行,其他字词的内积不关心。< / p>

补充:BA分别有大的行号和列号。

1 个答案:

答案 0 :(得分:11)

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

我们需要将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

结果是一样的。