高效地“应用”数组并保留结构

时间:2016-06-10 17:39:14

标签: arrays r matrix dimension

我有一系列矩阵。

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的多功能性相结合?

0 个答案:

没有答案