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)