我一直在努力从R(https://benchmarksgame-team.pages.debian.net/benchmarksgame/program/spectralnorm-python3-6.html)计算机语言基准测试游戏中复制解决方案。我对当前的解决方案感到非常满意,但想知道是否有办法从解决方案中删除vapply函数调用,以使用基本R函数来加快速度?我正在努力或多或少地限制在游戏范围之内。
start <- Sys.time()
eval_A <- function(i, j, u){
ij = i + j
sum(1.0 / (ij * (ij + 1) / 2 + i + 1) * u)
}
eval_B <- function(j, i, u){
ij = i + j
sum(1.0 / (ij * (ij + 1) / 2 + i + 1) * u)
}
eval_A_times_u_opt <- function(u, z){
vapply(1:z - 1, eval_A, FUN.VALUE = numeric(1), j = 1:z - 1, u = u)
}
eval_At_times_u_opt <- function(u, z){
vapply(1:z - 1, eval_B, FUN.VALUE = numeric(1), i = 1:z - 1, u = u)
}
eval_AtA_times_u <- function(u, z){
eval_At_times_u_opt(eval_A_times_u_opt(u, z), z)
}
spectral_norm <- function(z){
n = z #command line arg
u = rep(1, n)
for(dummy in 1:10){
v = eval_AtA_times_u(u, z)
u = eval_AtA_times_u(v, z)
}
vv = vBv = 0
for(i in 1:z){
vBv = vBv + u[i] * v[i]
vv = vv + v[i] * v[i]
}
sqrt(vBv/vv)
}
spectral_norm(5500)
end <- Sys.time()
end - start