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

Bs *_* He 7 r matrix-multiplication

我有两个矩阵AB,有啥最快的方法只是计算diag(A%*%B),即内积第i的行A第iB,以及其他方面的产品内部并不关心.

补充:A并分别B有大的行号和列号.

And*_*lin 14

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

我们需要乘以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);
Run Code Online (Sandbox Code Playgroud)

你的代码:

diag(A %*% B)
# [1] 2492.198 2474.869 2459.881 2509.018 2477.591
Run Code Online (Sandbox Code Playgroud)

没有矩阵乘法的直接计算:

colSums(t(A) * B)
# [1] 2492.198 2474.869 2459.881 2509.018 2477.591
Run Code Online (Sandbox Code Playgroud)

结果是一样的.