在R中没有循环的3D阵列和矩阵列的元素的交叉积

时间:2014-10-16 19:40:22

标签: arrays r performance loops matrix

我正在研究渔业种群评估模型,并希望通过移除循环(实际上是同一形式的两个循环)加快速度。 我有一个数组A,dim(A)= [L,L,Y],矩阵M,dim(M)= [L,Y]。 这些用于通过计算矩阵乘积来制作矩阵,垫子,暗(垫)= [L,Y]。我的循环看起来像:

for(i in 1:Y){
mat[,i]<-(A[,,i]%*%M[,i])[,1]}

任何人都可以帮助我吗?我真的需要速度提升。 另外,(不知道它是否会产生影响但是)每个A [,, i]矩阵都是下三角形。

1 个答案:

答案 0 :(得分:0)

我很确定这会给你想要的结果。由于没有可重复的例子,我无法绝对肯定。不得不追踪一些线性代数逻辑,看看你想要完成什么。

library(plyr) # We need this to split the array into a list of 9 matrices
B = lapply(alply(A, 3), function(x) (x%*%M)) # Perform 9 linear algebra multiplications
sapply(1:9, function(i) (B[[i]])[,i]) # Extract the 9 columns you actually want.

我使用了以下测试数据:

A = array(rnorm(225), dim = c(5,5,9))
M = matrix(rnorm(45), nrow = 5, ncol = 9)