如何有效地计算 R 中稀疏矩阵每一行的平方和?

How to efficiently compute the sum of squares of each of row of a sparse matrix in R?

我有一个矩阵 M,我想计算每行条目的平方和。所以对于一个小矩阵我可以写(在 R 中):

x <- diag(M %*% t(M))

但是,我的矩阵是一个稀疏矩阵,大约有 1000 万行和 100 列,执行上述操作首先计算整个 1000 万乘 1000 万矩阵,然后从中提取对角线,因此效率非常低。

在不计算不需要的值的情况下使用矩阵运算执行此操作的好方法是什么?

您可以简单地使用应用函数来完成此操作。比如Mat是你的相关矩阵,那么

apply(Mat, 1, FUN = function(x) sum(x^2))

apply()函数不适用于大数据。我认为它只是将每一行转换为一个包含很多 0 的向量..

您可以改用Matrix::rowSums(M ** 2)

简单的rowSums(M**2)应该是最有效的。