矩陣R I很感興趣的一般情況下來從一個公式,如矩陣:R:生成功能
X = some other matrix
Y(i, j) = X(i, j) + Y(i - 1, j - 1)
不幸的是我無法找到如何覈算矩陣自引用。
很明顯,執行順序和邊界檢查是在這裏的因素,但我想這些可以由矩陣方向和公式分別說明。
謝謝。
矩陣R I很感興趣的一般情況下來從一個公式,如矩陣:R:生成功能
X = some other matrix
Y(i, j) = X(i, j) + Y(i - 1, j - 1)
不幸的是我無法找到如何覈算矩陣自引用。
很明顯,執行順序和邊界檢查是在這裏的因素,但我想這些可以由矩陣方向和公式分別說明。
謝謝。
此解決方案假定您需要Y[1,n] == X[1,n]
和Y[n,1] == X[n,1]
。否則,可以在子矩陣X [-1,-1]上應用相同的解法來填充Y [-1,-1]的值。它還假定輸入矩陣是方形的。
我們使用事實Y[N,N] = X[N,N] + X[N-1, N-1] + ... + X[1,1]
加上非對角元素的相似關係。請注意,非對角元素是特定子矩陣的對角線。
# Example input
X <- matrix(1:16, ncol=4)
Y <- matrix(0, ncol=ncol(X), nrow=nrow(X))
diag(Y) <- cumsum(diag(X))
Y[1,ncol(X)] <- X[1,ncol(X)]
Y[nrow(X),1] <- X[nrow(X),1]
for (i in 1:(nrow(X)-2)) {
ind <- seq(i)
diag(Y[-ind,]) <- cumsum(diag(X[-ind,])) # lower triangle
diag(Y[,-ind]) <- cumsum(diag(X[,-ind])) # upper triangle
}
那麼,你可以隨時使用for
循環:
Y <- matrix(0, ncol=3, nrow=3)
#boundary values:
Y[1,] <- 1
Y[,1] <- 2
X <- matrix(1:9, ncol=3)
for (i in 2:nrow(Y)) {
for (j in 2:ncol(Y)) {
Y[i, j] <- X[i, j] + Y[i-1, j-1]
}
}
如果太慢,你可以把它轉換成C++(使用RCPP)很容易。
我想沒有快捷方式。最終使用Rpp的C++路線! –