我想对以下3d for 循环进行矢量化(或以任何可能的方式进行优化):
dat:dim = c(n,n,m)的数组
ref:具有dim = c(n,m)的矩阵
for(i in 1:length(dat[,1,1])){
for(k in 1:length(dat[1,1,])){
dat[i,,k][dat[i,,k] > ref[i,k]] <- NA
}
}
我正在使用的数组是7e3
x 7e3
x 2e2
,因此上面的 for 循环实际上非常昂贵。要启动,我需要执行两个或三个非常类似的操作(在不同的数组上),这样任何节省的时间都会成倍增加。
示例dat
和ref
数组:
dat <- array(seq(1,75), dim=c(5,5,3))
ref <- cbind(seq(6,10), seq(36,40), seq(61,65))
答案 0 :(得分:2)
您可以改用它。它会创建一个符合new_ref
的{{1}}数组,因此您可以直接比较它们:
dat
与你的循环比较:
new_ref <- aperm(array(ref, dim(dat)[c(1,3,2)]), c(1,3,2))
dat3 <- dat
dat3[dat3 > new_ref] <- NA