怎样才算对角矩阵乘积的R中
答
这可以在没有全矩阵乘法的情况下完成,仅使用矩阵元素的乘法。
我们需要将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
结果是一样的。
+0
@AndreyShabalin真的是一个聪明的方法。我会先试试这个。我认为这可能是软件计算方面最快的方法,但我认为在代数方面应该有更好的方法。 –
+0
它在数值上等同于'diag(A%*%B)',问题是'colSums'没有一个好的名字用于线性代数。 –
可能的重复http://stackoverflow.com/questions/21708489/compute-only-diagonals-of-matrix-multiplication-in-r – akrun
它相似但更清晰,因为它只涉及一个矩阵乘法。 –
@akrun他们非常相似,是的。但是,相关问题是数学中使用的一种模式,并不适合这种模式。也就是说,这个问题的答案实际上与这个问题的答案差不多。另一个问题可能会承认更多的答案。 –