【问题标题】:How to efficiently compute the sum of squares of each of row of a sparse matrix in R?如何有效地计算R中稀疏矩阵每一行的平方和?
【发布时间】:2020-01-02 18:14:05
【问题描述】:

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

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

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

在不计算不需要的值的情况下,用矩阵运算来做到这一点的好方法是什么?

【问题讨论】:

  • 有 1000 万行,问题是你如何将这些数据加载到 R 中,以及为什么你坚持做矩阵运算,而你可以简单地对逐行做一个简单的操作- 行基础?
  • @MrGumble R 支持稀疏矩阵,因此将这样大小的矩阵加载到 R 中并不难。对 1000 万行执行 for 循环似乎也效率不高,因为循环将在 R 中完成,而矩阵运算被转换为更快的 C。
  • 考虑到还没有人建议,这可能是幼稚的,但是rowSums(M^2) 怎么样?另一种选择是使用apply() 的并行处理。
  • 您不需要循环每行,因为您的行对于此操作是独立的,您可以提取数据块并使用 Neeraj 建议的方法.

标签: r matrix sparse-matrix linear-algebra


【解决方案1】:

您可以使用 apply 函数简单地做到这一点。比如Mat就是你的相关矩阵,那么

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

【讨论】:

  • 你知道这是否正确/有效地处理了稀疏矩阵的情况吗?
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2021-11-18
      • 2021-10-25
      • 2016-10-01
      • 2020-12-07
      • 2019-05-26
      • 1970-01-01
      • 2021-04-14
      • 2023-02-04
      • 2014-10-11
      相关资源
      最近更新 更多