【发布时间】: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