我正在研究渔业种群评估模型,并希望通过移除循环(实际上是同一形式的两个循环)加快速度。 我有一个数组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]矩阵都是下三角形。
答案 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)