我是R和stats的新手。在當前工作的域中,我需要以獨特的方式計算累積列總和。快速替代計算帶矩陣的colCumsums
最初寬度b和行數n的正方形帶矩陣是對於n = 8和b provided.For例= 3
0 1 2 7 0 0 0 0
0 0 3 6 7 0 0 0
0 0 0 3 1 7 0 0
0 0 0 0 4 4 7 0
0 0 0 0 0 5 8 7
0 0 0 0 0 0 1 8
0 0 0 0 0 0 0 4
0 0 0 0 0 0 0 0
則矩陣是在這樣一種方式,anxb待轉化用對角線爲列矩陣是obtained.Like對於給定的例子中,
1 2 7
3 6 7
3 1 7
4 4 7
5 8 7
1 8 0
4 0 0
0 0 0
我目前使用下面的函數來執行此操作。
packedband <- function(x, n, b) {
mat <- sapply(0:(b-1), function(i)
diag(x[-(n:(n-i)), -(1:(1+i))])[1:n])
mat[is.na(mat)] <- 0
return(mat)
}
然後從matrixStats應用colCumsums功能packageto獲得期望的輸出matrix.For給出的示例,
1 2 7
4 8 14
7 9 21
11 13 28
16 21 35
17 29 35
21 29 35
21 29 35
我所尋找的是這些操作的,因爲在給定一個更快的計算域,列(或行)的數量可以> 10^5。可能的是,由於最終目標是獲得累積列總和,因此可以去除計算打包帶功能的步驟。 在此先感謝。
我不明白,應該是什麼樣的輸出試試。如果你只是想使用colSums()函數?還有函數'abandSparse(n,m = n,k,diagonals,symmetric = FALSE,giveCsparse = TRUE)'。 – Mislav
@mkty'colCumsums'不是一個基本的R函數。請提及該函數所在的包的名稱。 @Mislav與'abandSparse'相同。 – lmo
@lmo我修改了這個問題。請看看。 – Mkty