【发布时间】:2016-06-02 01:51:07
【问题描述】:
我有 100,000 个稀疏矩阵(“dgCMatrix”)存储在一个列表对象中。每个矩阵的行数相同(8,000,000),列表大小约为 25 Gb。现在当我这样做时:
do.call(cbind, theListofMatrices)
将所有矩阵组合成一个大的稀疏矩阵,我得到了“节点堆栈溢出”。实际上,我什至不能只使用该列表中的 500 个元素来执行此操作,它应该输出一个大小仅为 100 Mb 的稀疏矩阵。
我对此的猜测是 cbind() 函数将稀疏矩阵转换为正常的密集矩阵,从而导致堆栈溢出?
其实我也试过这样的:
tmp = do.call(cbind, theListofMatrices[1:400])
这很好用,tmp 仍然是一个大小为 95 Mb 的稀疏矩阵,然后我尝试了:
> tmp = do.call(cbind, theListofMatrices[1:410])
Error in stopifnot(0 <= deparse.level, deparse.level <= 2) :
node stack overflow
然后发生错误。但是,我可以毫无困难地执行以下操作:
cbind(tmp, tmp, tmp, tmp)
因此,我认为它与 do.call() 有关
Reduce() 似乎解决了我的问题,虽然我仍然不知道 do.call() 崩溃的原因。
【问题讨论】:
-
这让我想起了这个问题stackoverflow.com/questions/23035982/…。也许那里的东西可以提供帮助
-
@user20650 您是否找出导致您在该帖子中出现错误的问题?
-
好吧,我实际上从未报告过这个问题。但是从Ben's comment 你可以尝试
Reduce,或者你可以尝试从它的i、j、x组件中构建它,re Flodels -
一些附加信息可以帮助人们提出替代方案:每个矩阵有多少列?大约,有多稀疏?你用多少内存?
-
哦,从 R-devel 看(r-forge.r-project.org/tracker/… 和 stat.ethz.ch/pipermail/r-devel/2016-May/072682.html 是已知的
标签: r sparse-matrix