我正在嘗試將矩陣串列(按照它們出現在從矩陣 1 開始的串列中的順序)乘以初始向量,然后遞回地乘以;所以串列中的矩陣 2 乘以結果向量。我嘗試了 lapply 和 map 的各種迭代,但無法向前投影并遞回執行。更明確地說:A[[1]] % * % allYears[,1],然后是 A[[2]] % * % allYears[,2],.....,A[[4]] % * % allYears [,4] 生成 allYears 中的最后第 5 列。下面是在 A[[i]] 索引處的 for 回圈中存在已知錯誤的示例代碼,因為 i 沒有顯式參考。在此先感謝您的幫助。
A <- lapply(1:4, function(x) # construct list of matrices
matrix(c(0, 0, 10,
rbeta(1,5,4), 0, 0,
0, rbeta(1,10,2), 0), nrow = 3,ncol=3, byrow = TRUE, ))
n <- c(1000,100,10) # initial vector of abundances
nYears = 4 # define the number of years to project over
allYears <- matrix(0,nrow=3,ncol=nYears 1) # build a storage array for all abundances
allYears[,1] <- n # set the year 0 abundance
for(t in 1:(nYears 1)){ # loop through all years
allYears[,t] <- A[[i]] %*% allYears[,t-1]
}
uj5u.com熱心網友回復:
根據描述,也許我們需要回圈遍歷序列 - 即長度Ais 4,而 'allYears' 的列數是 5。創建一個從 2 到ncol'allYears' 的索引,然后回圈遍歷該索引的序列,根據序列提取'A'的對應元素,而我們得到上allYears一列
i1 <- 2:(nYears 1)
for(t in seq_along(i1)) {
allYears[,i1[t]] <- A[[t]] %*% allYears[,i1[t]-1]
}
-輸出
> allYears
[,1] [,2] [,3] [,4] [,5]
[1,] 1000 100.00000 817.24277 2081.08322 333.6702
[2,] 100 261.46150 55.44237 423.22095 1244.6680
[3,] 10 81.72428 208.10832 33.36702 355.5175
uj5u.com熱心網友回復:
另一種可能太聰明的解決方案:
構造 ( A[[1]], A[[1]] %*% A[[2]], ... )的串列
Alist <- Reduce("%*%", A, accumulate=TRUE)
將這些中的每一個乘以初始值
vlist <- lapply(Alist, "%*%", n)
結合:
do.call(cbind, vlist)
[,1] [,2] [,3] [,4]
[1,] 100.00000 856.66558 4864.20044 486.420
[2,] 569.23739 56.92374 543.02451 3307.690
[3,] 78.55101 553.62548 55.36255 445.619
通過使用可能會以更少的步驟完成此操作,init = n但我無法弄清楚如何使用矩陣乘法中的項的正確排序來使其作業......
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/416890.html
標籤:
上一篇:撰寫此代碼的正確方法是什么?
