về cơ bản tôi muốn thực hiện trung bình đường chéo trong R. Dưới đây là một số mã được điều chỉnh từ gói simsalabim để làm trung bình đường chéo. Chỉ có điều này là chậm.Giúp tăng tốc vòng lặp trong R
Bất kỳ đề xuất nào để vector hóa điều này thay vì sử dụng một cách thủ công?
reconSSA <- function(S,v,group=1){
### S : matrix
### v : vector
N <- length(v)
L <- nrow(S)
K <- N-L+1
XX <- matrix(0,nrow=L,ncol=K)
IND <- row(XX)+col(XX)-1
XX <- matrix(v[row(XX)+col(XX)-1],nrow=L,ncol=K)
XX <- S[,group] %*% t(t(XX) %*% S[,group])
##Diagonal Averaging
.intFun <- function(i,x,ind) mean(x[ind==i])
RC <- sapply(1:N,.intFun,x=XX,ind=IND)
return(RC)
}
Đối với dữ liệu bạn có thể sử dụng sau đây
data(AirPassengers)
v <- AirPassengers
L <- 30
T <- length(v)
K <- T-L+1
x.b <- matrix(nrow=L,ncol=K)
x.b <- matrix(v[row(x.b)+col(x.b)-1],nrow=L,ncol=K)
S <- eigen(x.b %*% t(x.b))[["vectors"]]
out <- reconSSA(S, v, 1:10)
Ví dụ về dữ liệu ví dụ. –
tôi đã thêm một số dữ liệu. cảm ơn vì lời nhắc. – pslice
Tuyệt vời; bạn sẽ nhận được câu trả lời tốt hơn nhiều với một ví dụ tái sản xuất. –