我有两个矩阵A
和B
,那么只是计算diag(A%*%B)
的最快方法是什么,即 A
的{{1}}和 ith 列的{ith 行,其他字词的内积不关心。< / p>
补充:B
和A
分别有大的行号和列号。
答案 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
结果是一样的。