我有两个矩阵A
and B
,那么最快的方法是什么just计算diag(A%*%B)
,即内积ith row of A
and ith的列B
, and 不关心其他项的内积.
补充:A
and 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
结果是一样的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)