gpt4 book ai didi

r - 在巨大矩阵上应用运算时不允许使用负长度向量

转载 作者:行者123 更新时间:2023-12-02 01:12:13 25 4
gpt4 key购买 nike

我有一个矩阵 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 内存(ubuntu16、r4.8xlarge),我一直在监视它以查看内存是否耗尽,但内存似乎还不错。如果我可以将其变成稀疏矩阵,那么我可以将大小减小到 3 Gb,因为多数元素为零(95% 为零)。

任何使其成为稀疏矩阵的建议都会有所帮助。

下面帖子的建议 R - data frame - convert to sparse matrix

稀疏化,不起作用。 4 小时后,我停止了执行。

最佳答案

您可以拆分矩阵 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()

关于r - 在巨大矩阵上应用运算时不允许使用负长度向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44725600/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com