我使用dgCMatrix
包中的类Matrix
来存储大约2.55亿个值的方阵,大小约为1.7 MB。
然而,在我执行variable <- variable/rowSums(variable)
之后,其中variable
是稀疏矩阵,结果变量变为类dgeMatrix
,并且大小膨胀到接近2GB,有效占用了所有可用内存和在某些情况下崩溃了脚本。
有没有办法强制输出保留在班级dgCMatrix
?
我怀疑原因是非零元素的数量增加到矩阵不再被认为是稀疏的点,这是由于在行的总和为零的元素中引入了NaN。如果有解决NaN的问题,我也会对此持开放态度。但请注意,我无法避免产生零行,因为我的矩阵需要是一个正方形,并且相应的列总和通常不为零。
答案 0 :(得分:1)
你可以尝试为除数做一个简单的ifelse函数:
variable <- variable/ifelse(rowSums(variable)!=0,rowSums(variable),1)
除非出于某种原因需要将其除以0,否则这似乎是避免使用NAN的最简单方法。
答案 1 :(得分:0)
我有同样的问题。这是我用来避免NaN并保留类dgCMatrix
中的输出的解决方法:
tmp = 1/rowSums(variable)
tmp[is.infinite(tmp)] <- 0
variable <- variable * tmp