【发布时间】:2019-09-30 07:11:44
【问题描述】:
我正在尝试转换我当前用于跨大型矩阵运行进程的 for 循环。当前的 for 循环在 30 x 30 的部分中找到最大值并创建一个具有最大值的新矩阵。
for 循环的当前代码如下所示:
mat <- as.matrix(CHM) # CHM is the original raster image
maxm <- matrix(nrow=nrow(mat)/30, ncol=ncol(mat)/30) # create new matrix with new dimensions
for(i in 1:dim(maxm)[1]) {
for(j in 1:dim(maxm)[2]) {
row <- 30 * (i - 1) + 1
col <- 30 * (j - 1) + 1
maxm[i,j] <- max(CHM[row:(row + 29), col:(col + 29)])
}
}
我想将其转换为 foreach 循环以使用并行处理。我已经制作了以下代码,但是这很有效。我不确定如何在 foreach 循环中生成新矩阵:
ro<-nrow(mat)/30
co<-ncol(mat)/30
maxm <- matrix(nrow=nrow(mat)/30, ncol=ncol(mat)/30)
foreach(i=ro, .combine='cbind') %:%
foreach(j=co, .combine='c') %dopar% {
row <- 30 * (i - 1) + 1
col <- 30 * (j - 1) + 1
maxm[i,j]<-(max(CHM[row:(row + 29), col:(col + 29)]))
}
请给点建议!
【问题讨论】:
-
maxm[i,j]
-
{ 中的错误:任务 1 失败 - “找不到对象‘maxm’”。我不认为它喜欢在循环中为矩阵赋值
-
啊,是的,kk,这行不通。您的代码的主要问题是存储计算结果。我经常使用 parLapply/parSapply 而不是 foreach-dopar,但是,您可能应该这样编写代码: maxm = foreach(i=ro, .combine='cbind') %:% { result = foreach(j = co , .combine='c') %dopar% { 行
标签: r for-loop matrix foreach doparallel