如何只计算R中矩阵乘积的对角线
How to just calculate the diagonal of a matrix product in R
我有两个矩阵 A
和 B
,那么 just 计算 diag(A%*%B)
的最快方法是什么,即内部 - A
的第第行与B
的第第列的乘积,以及内部-其他条款的产品不关心.
补充:A
和B
行号和列号分别较大
这可以在没有完全矩阵乘法的情况下完成,只使用矩阵元素的乘法。
我们需要将 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
结果是一样的
我有两个矩阵 A
和 B
,那么 just 计算 diag(A%*%B)
的最快方法是什么,即内部 - A
的第第行与B
的第第列的乘积,以及内部-其他条款的产品不关心.
补充:A
和B
行号和列号分别较大
这可以在没有完全矩阵乘法的情况下完成,只使用矩阵元素的乘法。
我们需要将 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
结果是一样的