我有一个矩阵M1(3644069845个元素,27.2 Gb)
dim(M1)
[1] 5785 629917
此矩阵上涉及解析元素的任何操作都会以错误结束 很少例如:
SM1<-as(M1,"dgCMatrix")
Error in .Call(dense_to_Csparse, from) :
negative length vectors are not allowed
请注意,我的系统有240 GB ram(ubuntu16,r4.8xlarge),我一直在监视它以查看RAM是否已经耗尽,但似乎RAM仍然没问题。 如果我可以将其设置为稀疏矩阵,那么我可以将大小减小到3 Gb,因为多数元素是零(95%是零)。
任何使其成为稀疏矩阵的建议都会有所帮助。
稀疏,不起作用。 4个小时后我停止了执行。答案 0 :(得分:2)
你可以拆分你的矩阵M1,使其在稀疏时不超过矢量长度限制(2 ^ 31),然后使分割的矩阵稀疏并再次组合:
# Split
m11 <- M1[,0:314958]
m12 <- M1[,314959:nrow(M1)]
# Sparse
m11_sparse <- Matrix(as.matrix(m11), sparse = TRUE)
m12_sparse <- Matrix(as.matrix(m12), sparse = TRUE)
# Combine
M1_sparse <- cbind(m11_sparse,m12_sparse)
# Clean
rm(M1,m11,m12,m11_sparse,m12_sparse)
gc()