我正在编写的一些 R 代码中有一行非常慢。它使用 apply 命令在 4 维数组中应用 logSumExp。我想知道有什么办法可以加快速度!
Reprex:(这可能需要 10 秒或更长时间才能运行)
library(microbenchmark)
library(matrixStats)
array4d <- array( runif(5*500*50*5 ,-1,0),
dim = c(5, 500, 50, 5) )
microbenchmark(
result <- apply(array4d, c(1,2,3), logSumExp)
)
任何建议表示赞赏!
rowSums
是 apply 的一个不太通用的版本,它针对加法时的速度进行了优化,因此可以用来加快计算速度。请注意帮助文件中的警告?rowSums
如果保持计算之间的差异很重要NA
and NaN
.
library(microbenchmark)
library(matrixStats)
array4d <- array( runif(5*500*50*5 ,-1,0),
dim = c(5, 500, 50, 5) )
microbenchmark(
result <- apply(array4d, c(1,2,3), logSumExp),
result2 <- log(rowSums(exp(array4d), dims=3))
)
# Unit: milliseconds
# expr min lq mean median uq max neval
# result <- apply(array4d, c(1, 2, 3), logSumExp) 249.4757 274.8227 305.24680 297.30245 328.90610 405.5038 100
# result2 <- log(rowSums(exp(array4d), dims = 3)) 31.8783 32.7493 35.20605 33.01965 33.45205 133.3257 100
all.equal(result, result2)
#TRUE
这使得我的计算机速度提高了 9 倍
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)