【发布时间】:2014-02-16 06:53:04
【问题描述】:
假设我这样做:
m <- matrix(0, nrow = 20, ncol = 3)
system.time(m[1, 1:3] <- c(1,1,1))
这需要 0 秒。
现在我这样做:
m <- matrix(0, nrow = 10000000, ncol = 3)
system.time(m[1, 1:3] <- c(1,1,1))
这在我的系统上大约需要 0.47 秒。
我需要填写一个大约 850 万行的矩阵,因此每行 0.47 秒不是一个选项。有没有办法解决?除了创建许多较小的子矩阵并在以后进行 rbinding 之外?
谢谢!
【问题讨论】:
-
您需要以这种方式逐行填充矩阵吗? (PS:在我的系统上只需要大约 0.03 秒的系统时间)
-
是的。对于每个日期/项目组合,我需要执行滚动回归。日期数 * 项目数约为 850 万。我已经优化了 Rcpp 中的回归,现在分配值似乎是瓶颈:(即使是 0.03 秒,也就是 71 小时。
-
那么,您调用回归函数约 850 万次,每次它返回一个长度为 3 的向量?如果是这样,也许可以考虑像
parSapply这样的东西,它可以通过利用多个内核来节省一些时间,并且可以一次返回整个矩阵。 -
我用
microbenchmark重新运行了你的第二个代码块,平均需要1.205e-6 秒。对于 850 万行,这将超过 10 秒。 Win 8.1 (i4770) 上的 64 位 R 3.0.2。如果您的代码/数据具有足够的可移植性,fire me an email 我很乐意为您运行它并将结果矩阵发送给您。 -
你会考虑多久?超过一天,两天?电脑时间很便宜。 :)