假设我有一个三维数组:
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)
哪个更快,但是为多个切片手动执行会变得非常繁琐.是否有一个函数可以执行上面的表达式而无需手动指定每个切片?
我认为你正在寻找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)
归档时间: |
|
查看次数: |
1283 次 |
最近记录: |