r - 具有 0 值的 R 矩阵单元格需要多少空间?以及如何处理大矩阵计算

标签 r multithreading matrix memory-management sparse-matrix

我想计算矩阵的相关性,但由于内存无法容纳而被程序停止。

M = matrix(0, length(user), length(mat))   

当我运行这条线时,我收到一条消息

Error: cannot allocate vector of size 146487.5 Gb

仅供引用

length(user) = 6728367
length(mat) = 2922138

那么一个0值矩阵单元需要占用多少空间呢?

更进一步,如何处理基于稀疏矩阵的矩阵计算?有包裹吗?或者我可以进行多核计算?

最佳答案

您的错误消息中提到需要多少空间:146,487.5 GB。

如果你想要这么大的矩阵,就用一个稀疏矩阵:

library(Matrix)
user = 6728367
mat = 2922138
M = Matrix(0, user, mat)  

这会起作用:

> str(M)
Formal class 'dgCMatrix' [package "Matrix"] with 6 slots
  ..@ i       : int(0) 
  ..@ p       : int [1:2922139] 0 0 0 0 0 0 0 0 0 0 ...
  ..@ Dim     : int [1:2] 6728367 2922138
  ..@ Dimnames:List of 2
  .. ..$ : NULL
  .. ..$ : NULL
  ..@ x       : num(0) 
  ..@ factors : list()

有教程here你可以在网上找到更多。数学计算通过包进行了优化,因此像 M * M 这样的东西也可以快速运行。 另外,您可以检查 here

关于r - 具有 0 值的 R 矩阵单元格需要多少空间?以及如何处理大矩阵计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56733146/

相关文章:

c - 将相同的信息发送到多个线程/套接字?

opengl - 相对于指定空间正确转换节点?

r - 如何在R中将简体中文转换为繁体中文?

multithreading - TParallel.For : Store values in a TList while they are calculated in a TParallel. For 循环

java - 无法在 Big Sur 上安装 rJava

Java 同步、线程安全、包装对象和竞争条件

c++ - vector 的 vector 和自定义类之间的区别

python - python/scipy/numpy 中的高效增量稀疏矩阵

r - 使用 dplyr 汇总并统计分组 df 中唯一值的数量

rvest,html_nodes() 错误 : cannot coerce type 'environment' to vector of type 'list' . RScript 失败,在 session 中工作