library(Matrix)
a<-data.frame(1:1000)
object.size(a)
4672 bytes
b<-as.matrix(a)
object.size(b)
4464 bytes
d<-as(b,'dgCMatrix')
object.size(d)
13520 bytes
e<-Matrix(b, sparse = TRUE)
object.size(e)
13520 bytes
当我将数据帧转换为稀疏矩阵时,有谁可以告诉我为什么数据框的大小会增加?
当我们的数据框中没有或者更少的零时,稀疏矩阵转换是否变得无用?我想要一个矩阵进入xgboost。
在这种情况下,由于稀疏矩阵转换似乎失败了,你能告诉我其他任何内存节省技巧吗?请指导
答案 0 :(得分:2)
稀疏矩阵 - 根据定义 - 是大多数条目为零的矩阵。在大型和稀疏矩阵的情况下,通过以压缩方案表示数据,可以显着减少计算时间和存储器要求方面的计算资源。
常用且相对简单的稀疏矩阵压缩方案包括将矩阵表示为三个向量:
通过使用这种压缩方案,可以避免存储多个零。此外,利用这些表示,可以跳过几个无用的数值运算,例如耗时的乘法运算。因此,如果矩阵足够大且稀疏,稀疏矩阵压缩方案非常强大。
然而,将稀疏矩阵压缩方法应用于密集矩阵是没有意义的。原因是第一个矢量基本上具有原始矩阵的大小。另外,存在两个相同大小的整数向量。这与您的观察结果一致,即总大小约为三倍。