矢量化总和在阵列的切片

Sac*_*amp 4 arrays r

假设我有一个三维数组:

set.seed(1)
foo <- array(rnorm(250),dim=c(5,10,5))
Run Code Online (Sandbox Code Playgroud)

我想在第4,5和6列上创建每行和每层的矩阵.我可以这样写:

apply(foo[,4:6,],c(1,3),sum)
Run Code Online (Sandbox Code Playgroud)

但是这会按行和每层分割数组,因为它没有矢量化,所以非常慢.我也可以添加切片:

foo[,4,]+foo[,5,]+foo[,6,]
Run Code Online (Sandbox Code Playgroud)

哪个更快,但是为多个切片手动执行会变得非常繁琐.是否有一个函数可以执行上面的表达式而无需手动指定每个切片?

Sam*_*eer 8

我认为你正在寻找rowSums / colSums(快速实施apply)

colSums(aperm(foo[,4:6,], c(2,1,3)))

> all.equal(colSums(aperm(foo[,4:6,], c(2,1,3))), foo[,4,]+foo[,5,]+foo[,6,])
[1] TRUE
Run Code Online (Sandbox Code Playgroud)