在R中执行此求和的最快方法是什么?
这是我到目前为止所拥有的
ans = 0
for (i in 1:dimx[1]){
for (j in 1:dimx[2]){
ans = ans + ((x[i,j] - parameters$mu)^2)/(parameters$omega_2[i]*parameters$sigma_2[j])
}
}
其中omega_2
和sigma_2
分别是omega ^ 2和sigma ^ 2.
答案 0 :(得分:4)
没什么好看的:
# sample data
m <- matrix(1:20, 4)
sigma <- 1:ncol(m)
omega <- 1:nrow(m)
mu <- 2
sum(((m - mu) / outer(omega, sigma))^2)
答案 1 :(得分:2)
通常很容易对这种操作进行矢量化。但是,在这种情况下,当n
不等于m
并且还因为双重求和时,它有点棘手。但这是我们如何进行的:
# n = 3, m = 2
xs <- cbind(1:3, 4:6)
omegas <- 1:3
sigmas <- 1:2
mu <- 3
sum((t((xs - mu) / omegas) / sigmas)^2)
# [1] 5
此处我们使用了三次回收和t()
来按sigmas
划分适当的元素。