【发布时间】:2014-08-14 19:49:18
【问题描述】:
我有一个包含 2000 列和 3000 行的大型矩阵。对于每一列,我想做一个滑动窗口,在其中将 15 行相加,然后向下一行并对接下来的 15 行求和,等等......并使用此信息创建一个新矩阵。我有一个可以工作的函数(虽然看起来有点慢)但想并行运行它,因为这是一个更大的脚本的一部分,如果我使用没有并行等效的应用函数,开放集群就会关闭。此外,我必须将整个操作进行 100 次。稍后在脚本中,我使用 parLapply 或 parSapply。
这是我以非并行方式拥有的代码:
# df is a matrix with 2000 columns and 3000 rows, all numeric and no NAs
size <- 15 # size of window
len <- nrow(df) - size + 1 # number of sliding windows to perform
sumsmatrix <- apply(df, 2, function(x){
result <- sapply(1:len, function(y){
sum(x[y:(y+size-1)])
})
return(result)
})
提前致谢。 罗恩
【问题讨论】:
-
并行化应该是加快代码速度的最后一件事。第一步,看看
zoo包中的函数rollapply。这个问题可能会有所帮助:stackoverflow.com/questions/15943428/sliding-window-in-r
标签: r matrix parallel-processing apply