我有一系列矩阵。
dims <- c(10000,5,5)
mat_array <- array(rnorm(prod(dims)), dims)
我想在每个矩阵上执行基于矩阵的操作(例如通过solve
函数进行反转),但保留数组的完整结构。
到目前为止,我已经提出了3个选项:
选项1 :一个循环,它完全符合我的要求,但却很笨拙且效率低下。
mat_inv <- array(NA, dims)
for(i in 1:dims[1]) mat_inv[i,,] <- solve(mat_array[i,,])
选项2 :apply
函数,更快更干净,但每个矩阵都会向下移动到矢量。
mat_inv <- apply(mat_array, 1, solve)
dim(mat_inv)
[1] 25 10000
我知道我可以设置输出尺寸以匹配输入的尺寸,但我担心这样做会搞乱索引,特别是如果我必须应用非相邻尺寸(例如,如果我想要反转)跨越维度2)。
选项3 :来自aaply
软件包的plyr
函数,它完全符合我的要求,但速度比其他函数慢很多(4-5倍)。< / p>
mat_inv <- plyr::aaply(mat_array, 1, solve)
是否有任何选项将base::apply
的速度与plyr::aaply
的多功能性相结合?