【问题标题】:Matrix-like operations for 3D arrays in R?R中3D数组的类似矩阵的操作?
【发布时间】:2014-05-11 22:06:28
【问题描述】:

我目前正在使用 optim 估计 R 中的模型,但它真的很慢,如果我用零初始化它大约需要 30 分钟。当我分析整个事情时,我发现 apply 花费的时间最多,这是有道理的。所以这引出了我的问题:

x.arr <- array(1:9, c(3, 10, 3))
b    <- 1:3

f <- function(x, b) {
    exp(x%*%b)
}

u.mat <- apply(x.arr, 2, f, b = b)

有没有更有效的方法来做到这一点? x.arr 是一个 3D 数组,所以似乎应该有某种方法可以使用矩阵运算来解决相同的目标。

另外,我运行 Linux,所以我假设我也可以轻松地使用 mclapply 或其他东西做某事,但每次我尝试时,我都设法挂起我的整个 R 会话。

还有一个包,tensor,但到目前为止我所尝试的一切都与我实际寻找的东西相去甚远,以至于我什至不确定我得到了什么。

我的线性代数不是最好的,但有件事告诉我应该有一些不错的选择而不使用 apply。

【问题讨论】:

    标签: arrays r optimization linear-algebra apply


    【解决方案1】:

    随着这些事情的进行,我找到了一个使用 tensor 包大大加快速度的解决方案。 (我昨天花了 4 个小时,但显然今天事情刚刚好。)

    require(tensor)
    
    x.arr <- array(1:9, c(3, 10, 3))
    b     <- 1:3
    
    u.mat <- exp(tensor(x.arr, b, alongA = 3, alongB = 1))
    

    现在我从大约 30 分钟到大约 10 分钟。

    当然,如果有人知道如何让它更快,我仍然很感兴趣,但也许如果其他人发现了这个问题,这至少对他们来说是一个令人满意的答案。

    【讨论】:

      猜你喜欢
      • 2014-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多