Ale*_*x W 6 r sparse-matrix data.table
data.table由于本文未包含的各种原因,我想在该框架中工作。包中是否data.table有指示矩阵的稀疏表示Matrix?
library(Matrix)
library(data.table)
set.seed(123409L)
ints <- sample.int(2L, 1e6, replace=T, prob= c(0.9, 0.1)) - 1
m <- Matrix(ints, ncol= 1000)
dt <- data.table(matrix(ints, ncol= 1000))
pryr::object_size(m) # 1.22 MB
pryr::object_size(dt) # 8.1 MB
Run Code Online (Sandbox Code Playgroud)
假设在实际用例中我更接近6e8元素,假设增长是无限的。
如果这个问题已经得到解答,请提前致歉。我很高兴它被标记为重复项;但我没有通过搜索找到重复的。
data.table正如 @Frank 在他的评论中所建议的,您可以通过将非零元素及其索引存储为单独的观察值(即以三元组形式),在 a 中有效地表示稀疏矩阵:
m2 <- as(m, "dgTMatrix")
dt2 <- data.table(i=m2@i+1, j=m2@j+1, value=m2@x)
pryr::object_size(dt2) # 1.62 MB
Run Code Online (Sandbox Code Playgroud)
这data.table也可以从以下构造dt:
dt2 <- melt(copy(dt)[,i:=.I], id.vars="i"
)[value>0][,j:=as.integer(variable)][,variable:=NULL]
Run Code Online (Sandbox Code Playgroud)