不带循环的三维可变维对象矩阵之和

Cla*_*nry 1 arrays performance r matrix vectorization

我在R中有一个三维物体,它包含n个方形矩阵.例如:

myObject[,,1] # returns a square matrix
myObject[,,2] # returns a square matrix of the same size
...
Run Code Online (Sandbox Code Playgroud)

对象内的所有矩阵都具有相同的大小.我想把所有矩阵加在一起,没有循环.如果我知道对象中有多少个矩阵,这很简单.例如:

matrixSum <- myObject[,,1] + myObject[,,2] + myObject[,,3]
Run Code Online (Sandbox Code Playgroud)

问题是,我需要对几千个这样的对象执行此操作,并且每个对象中都有可变数量的矩阵.有没有办法可以在没有循环的情况下做到这一点?从某种意义上说,我想尝试"矢量化"这个总和.

小智 5

最方便,但肯定不是最快的是使用apply:

matrixSum <- apply(myObject, c(1,2), sum)
Run Code Online (Sandbox Code Playgroud)

myObject <- array(c(1,2,3),dim = c(3,4,3))
myObject
, , 1

     [,1] [,2] [,3] [,4]
[1,]    1    1    1    1
[2,]    2    2    2    2
[3,]    3    3    3    3

, , 2

     [,1] [,2] [,3] [,4]
[1,]    1    1    1    1
[2,]    2    2    2    2
[3,]    3    3    3    3

, , 3

     [,1] [,2] [,3] [,4]
[1,]    1    1    1    1
[2,]    2    2    2    2
[3,]    3    3    3    3

apply(myObject, c(1,2), sum)
     [,1] [,2] [,3] [,4]
[1,]    3    3    3    3
[2,]    6    6    6    6
[3,]    9    9    9    9
Run Code Online (Sandbox Code Playgroud)

加成:

使用rowSums应该必须更快:

rowSums(myObject, dims = 2)
     [,1] [,2] [,3] [,4]
[1,]    3    3    3    3
[2,]    6    6    6    6
[3,]    9    9    9    9
Run Code Online (Sandbox Code Playgroud)