我在下面運行代碼來評估每個值的函式r。
對于 的每個元素r,該函式計算矩陣乘積的元素之和。在此之前,M根據核函式調整 的值。
# (1) set-up with toy data
r <- seq(0, 10, 1)
bw <- 25
M <- matrix(data = c(0, 1, 2,
1, 0, 1,
2, 1, 0), nrow = 3, ncol = 3)
X <- matrix(rep(1, 9), 3, 3)
#
# (2) computation
res <- c()
# loop, calculationg sum, Epanechnikov kernel
for(i in seq_along(r)) {
res[i] <- sum(
# Epanechnikov kernel
ifelse(-bw < (M - r[i]) & (M - r[i]) < bw,
3 * (1 - ((M - r[i])^2 / bw^2)) / (4*bw),
0) * X,
na.rm = TRUE
)
}
# result
res
我正在尋找使用 base R 加快速度的建議。謝謝!
uj5u.com熱心網友回復:
使用outer:
Mr <- outer(c(M), r, "-")
colSums(3*(1 - Mr^2/bw^2)/4/bw*(abs(Mr) < bw)*c(X))
#> [1] 0.269424 0.269760 0.269232 0.267840 0.265584 0.262464 0.258480 0.253632 0.247920 0.241344 0.233904
我還會注意到原始回圈解決方案可以通過在回圈之前預分配(例如,)for來加速。resres <- numeric(length(r))for
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/530443.html
標籤:r循环
