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