对多个矩阵/图像进行操作的 apply() 的更快替代方案

问题描述 投票:0回答:1

假设我有一堆图像切片作为 3D 数组:

myImages = array(runif(1024*1024*100), dim = c(1024,1024,100))

并且想要逐像素的中值。

medianImage = apply(myImages, c(1,2), median)

这个过程需要相当长的时间。 R 中有更快的替代方案吗?

r matrix
1个回答
0
投票

Rfast::rowMedians
速度更快,但需要重塑
myImages
:

myImages <- array(runif(1024*1024*100), dim = c(1024,1024,100))
system.time(medianImage <- apply(myImages, c(1,2), median))
#>    user  system elapsed 
#>   38.93    1.03   40.01
system.time({
  dm <- dim(myImages)
  dim(myImages) <- c(prod(dm[1:2]), dm[3])
  medianImage2 <- `dim<-`(Rfast::rowMedians(myImages), dm[1:2])
  dim(myImages) <- dm
})
#>    user  system elapsed 
#>    1.58    0.29    1.86
all.equal(medianImage, medianImage2)
#> [1] TRUE
© www.soinside.com 2019 - 2024. All rights reserved.