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

时间:2014-10-31 03:00:56

标签: arrays r performance matrix vectorization

我在R中有一个三维对象,它包含n个方形矩阵。例如:

myObject[,,1] # returns a square matrix
myObject[,,2] # returns a square matrix of the same size
...

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

matrixSum <- myObject[,,1] + myObject[,,2] + myObject[,,3]

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

1 个答案:

答案 0 :(得分:5)

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

matrixSum <- apply(myObject, c(1,2), sum)

实施例

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

增加:

使用rowSums的速度必须更快:

rowSums(myObject, dims = 2)
     [,1] [,2] [,3] [,4]
[1,]    3    3    3    3
[2,]    6    6    6    6
[3,]    9    9    9    9