我想计算矩阵的相关性,但由于内存无法容纳而被程序停止。
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/