gpt4 book ai didi

r - 是否有稀疏矩阵/对象的“data.table”表示形式?

转载 作者:行者123 更新时间:2023-12-04 11:38:19 25 4
gpt4 key购买 nike

出于各种原因,我想在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


假设在实际用例中,我更接近 6e8元素,假设增长不受限制。

如果已经回答了这个问题,请提前道歉。我很高兴被标记为重复项;但我没有通过搜索找到重复项。

最佳答案

正如@Frank在他的评论中建议的那样,您可以通过将非零元素及其索引存储为单独的观测值(即以三元组形式)来有效地表示data.table中的稀疏矩阵:

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


data.table也可以从 dt构造:

dt2 <- melt(copy(dt)[,i:=.I], id.vars="i"
)[value>0][,j:=as.integer(variable)][,variable:=NULL]

关于r - 是否有稀疏矩阵/对象的“data.table”表示形式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43217893/

25 4 0