【发布时间】:2017-10-28 22:06:53
【问题描述】:
我目前正在开发一个程序,以评估多个预测模型在模拟数据上的样本外性能。对于那些熟悉金融的人来说,它就像回测交易策略一样,只是我会评估预测而不是交易。
我目前使用 for 循环处理此类任务的一些对象是 7 维数组(维代表蒙特卡罗复制、数据生成过程、预测范围、模型参数选择的 3 维以及所有样本外分析所涵盖的时期)。显然,它的速度非常慢,所以并行计算对我来说是必须的。
我的问题是:如何在 R 中跟踪超过 2 个维度?让我们只向您展示使用“for 循环”和我的意思只有 3 个维度:
x <- array(dim=c(2,2,2))
for (i in 1:2){
for (j in 1:2){
for (k in 1:2){
x[i,j,k] <- i+j+k
}
}
}
如果我使用“foreach”之类的东西,我会非常恼火的是,据我所知,可用的组合功能将返回列表、矩阵或向量——但不会返回任意大的多维数组。例如:
library(doParallel)
library(foreach)
# Get the number of cores to use
no_cores <- max(1, detectCores()-1)
# Make cluster object using no_cores
cl <- makeCluster(no_cores)
# Initialize cluster for parallel computing
registerDoParallel(cl)
x <- foreach(i=1:2, .combine=rbind)%:%
foreach(j=1:2, .combine=cbind)%:%
foreach(k=1:2, .combine=c)%dopar%{
i+j+k
}
在这里,我基本上将结果组合成向量,然后是矩阵,最后是逐行堆积矩阵。另一种选择是使用列表,或者通过列堆积矩阵,但是当您有 7 个维度和数百万次迭代要跟踪时,您可以想象会出现混乱。
我想我也可以编写自己的“组合”函数并获得我想要的那种输出,但我怀疑我不是第一个遇到这个问题的人。要么有一种方法可以完全按照我的意愿去做,要么这里有人可以指出一种不同的方式来存储我的结果。我在解决这个问题上选择了一条效率低得荒谬的道路,这并不奇怪——毕竟我是经济学家,而不是数据科学家!
任何帮助将不胜感激。提前致谢。
【问题讨论】:
标签: r multidimensional-array parallel-processing