我有一个矩阵数组。
dims <- c(10000,5,5)
mat_array <- array(rnorm(prod(dims)), dims)
我想执行基于矩阵的运算(例如通过solve
函数)在每个矩阵上,但保留数组的完整结构。
到目前为止,我已经提出了3个选择:
Option 1:一个循环,它完全符合我的要求,但笨重且效率低下。
mat_inv <- array(NA, dims)
for(i in 1:dims[1]) mat_inv[i,,] <- solve(mat_array[i,,])
Option 2: The apply
函数,它更快、更清晰,但将每个矩阵压缩为一个向量。
mat_inv <- apply(mat_array, 1, solve)
dim(mat_inv)
[1] 25 10000
我知道我可以将输出维度设置为与输入维度相匹配,但我很担心这样做会弄乱索引,特别是如果我必须应用非相邻维度(例如,如果我想跨维度 2 反转) )。
Option 3: The aaply
函数从plyr
包,它正是我想要的,但比其他包慢得多(4-5倍)。
mat_inv <- plyr::aaply(mat_array, 1, solve)
是否有任何选项可以结合速度base::apply
具有多功能性plyr::aaply
?