gpt4 book ai didi

r - 在没有 Rcpp 的情况下加快速度?

转载 作者:行者123 更新时间:2023-12-01 04:08:01 25 4
gpt4 key购买 nike

我正在寻找加快以下算法的速度。我给函数一个 xts 时间序列,然后想对前 X 点的每个时间点执行主成分分析(我目前使用 500),然后使用该 PCA 的结果(5 个主成分在下面的代码)来计算一些值。像这样的东西:

lookback <- 500
for(i in (lookback+1):nrow(x))
{
x.now <- x[(i-lookback):i]
x.prcomp <- prcomp(x.now)
ans[i] <- (some R code on x.prcomp)
}

我认为这需要我将回溯行复制为列,以便 x类似于 cbind(x,lag(x),lag(x,k=2),lag(x,k=3)...lag(x,k=lookback)) ,然后运行 ​​ prcomp在每一行?不过,这似乎很昂贵。可能是 apply 的一些变体?我愿意研究 Rcpp,但想在那之前由你们运行它。

编辑:哇感谢所有的回复。关于我的数据集/算法的信息:
  • 暗淡(x.xts)当前 = 2000x24。但最终,如果这显示出希望,它将必须快速运行(我会给它多个数据集)。
  • func(x.xts) 大约需要 70 秒。那是 2000-500 个 prcomp 调用和 1500 个 500x24 数据框创建。

  • 我尝试使用 Rprof看看算法中最昂贵的部分是什么,但这是我第一次使用 Rprof所以我需要更多使用此工具的经验才能获得可理解的结果(感谢您的建议)。

    我想我会首先尝试将它滚动到一个 _apply 类型的循环中,然后看看并行化。

    最佳答案

    在我的 4 核桌面上,如果这无法在合理的时间范围内完成,我将使用以下内容(未测试)运行该 block :

    library(snowfall)
    sfInit(parallel = TRUE, cpus = 4, type = "SOCK")
    lookback <- 500
    sfExport(list = c("lookback", "x"))
    sfLibrary(xts)

    output.object <- sfSapply(x = (lookback+1):nrow(x),
    fun = function(i, my.object = x, lb = lookback) {
    x.now <- my.object[(i-lb):i]
    x.prcomp <- prcomp(x.now)
    ans <- ("some R code on x.prcomp")

    return(ans)
    }, simplify = FALSE) # or maybe it's TRUE? depends on what ans is

    关于r - 在没有 Rcpp 的情况下加快速度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8122778/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com