将数据帧转换为其大小为三倍的稀疏矩阵

时间:2016-05-14 14:46:21

标签: r sparse-matrix

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。

在这种情况下,由于稀疏矩阵转换似乎失败了,你能告诉我其他任何内存节省技巧吗?请指导

1 个答案:

答案 0 :(得分:2)

稀疏矩阵 - 根据定义 - 是大多数条目为零的矩阵。在大型和稀疏矩阵的情况下,通过以压缩方案表示数据,可以显着减少计算时间和存储器要求方面的计算资源。

常用且相对简单的稀疏矩阵压缩方案包括将矩阵表示为三个向量:

  • 一个向量包含矩阵中所有非零项的值。
  • 另外两个向量分别包含行索引和列索引,从而在矩阵中定义第一个向量中列出的非零值。

通过使用这种压缩方案,可以避免存储多个零。此外,利用这些表示,可以跳过几个无用的数值运算,例如耗时的乘法运算。因此,如果矩阵足够大且稀疏,稀疏矩阵压缩方案非常强大

然而,将稀疏矩阵压缩方法应用于密集矩阵是没有意义的。原因是第一个矢量基本上具有原始矩阵的大小。另外,存在两个相同大小的整数向量。这与您的观察结果一致,即总大小约为三倍。