R中3D阵列的矩阵式运算?

时间:2014-04-01 08:37:07

标签: arrays r optimization linear-algebra apply

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

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,应该有某种好的选择。

1 个答案:

答案 0 :(得分:0)

随着这些事情的发展,我找到了一种解决方案,使用张量包可以大大加快速度。 (我昨天花了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分钟的时间。

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