我想为一个矩阵计算相关性,但由于内存不足而被程序停止。
M = matrix(0, length(user), length(mat))
当我运行这条命令时,我收到了一条消息
错误:无法分配大小为146487.5 Gb的向量
供您参考
length(user) = 6728367
length(mat) = 2922138
0值矩阵单元需要占用多少空间?
此外,如何处理基于稀疏矩阵的矩阵计算?有没有相关软件包?或者我可以进行多核计算?
我想为一个矩阵计算相关性,但由于内存不足而被程序停止。
M = matrix(0, length(user), length(mat))
当我运行这条命令时,我收到了一条消息
错误:无法分配大小为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()
这里有一个教程(点击此处),你可以在网上找到更多相关内容。该软件包通过优化数学计算,使得像M * M这样的操作也能够快速完成。 同时,你也可以参考(点击此处)
as(as.matrix(df_here), 'sparseMatrix')
。 - LyzandeR