我正在努力编写快速代码来计算以下向量的函数:
目前我使用 for 循环对其进行编码,速度非常慢:
rho <- 0.9
E_D <- numeric(100)
E_D[1] <- 1
for (t in 2:100){
summm <- sum(cumsum(0.9^(0:(t-2)))^2)
E_D[t] <- t+exp(summm)
}
summm是我在上图中解析定义的向量的元素。 E_D 是一个向量,它是该向量的某个函数。如果我将最大 t 设置为 5000,则上面的代码在我的机器上运行超过 1 秒,这对于我的目的来说太慢了。
我尝试了data.table
解决方案,但它无法容纳单元格内的中间向量输出:
tempdt <- data.table(prd=2:100 ,summm=0)
tempdt[, summm:=sum(cumsum(rho^(0:(prd-2)))^2)]
Warning message:
In 0:(prd - 2) : numerical expression has 99 elements: only the first used
如何让上面的代码更快?请不要告诉我我必须在 Matlab 中完成...
编辑:为了澄清,我需要计算以下向量:
最佳答案
也许是这样的:
n <- 100L
cp <- cumprod(rep(0.9, n - 1L)) / 0.9
cssq <- cumsum(cp)^2
cumsum(cssq)
截断的输出:
[1] 1.00000 4.61000 11.95410 23.78082 40.55067 62.50542 89.72283 122.15959 ...
关于r - 向量化 R 代码,已使用序列符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61860337/