【发布时间】:2011-04-16 21:45:33
【问题描述】:
以下循环需要很长时间才能运行。如果我评论里面的行,它会运行得很快。 prices 是 3224x40 矩阵。
get_returns <- function(prices, type=1) {
returns = prices
returns2 = prices
returns[,] = 0
M = dim(prices)[1]
N = dim(prices)[2]
for (i in 2:M) {
for (j in 1:N) {
returns[i,j] = prices[i,j]/prices[i-1,j] - 1 ## LINE 1
returns2[i,j] = prices[i,j]/prices[1,j] - 1 ## LINE 1
}
}
}
> dim(prices)
[1] 3224 40
>
> system.time(get_returns(prices,1))
user system elapsed
1213.95 1.12 1266.60
>
> # After commenting LINE 1
> system.time(get_returns(prices,1))
user system elapsed
0.67 0.00 0.75
>
运行大约需要 20 分钟。我想知道为什么要花这么长时间才能运行,如果我能做些什么来优化它。我还有其他运行得相当快的循环,但这个特定的循环是个问题。
【问题讨论】:
-
@user236215 :您的运行时简直太疯狂了。确定价格是一个矩阵?
-
是的,它是一个矩阵。您可能可以使用随机值设置一个类似的矩阵并注意这一点。
-
@user236215 : 在我的电脑上,这个运行时间为 1.2 秒... (
system.time(test <- get_returns(prices = matrix(runif(3224*40), ncol = 40)))) -
我得到了相同的结果(1.22 秒)。
-
我得到了 0.58。我还发现 get_returns 需要 return(returns) 才能返回任何值。
标签: r optimization