R 中 3D 数组的矩阵式操作



我目前正在使用 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会话。

还有一个包,张量,但到目前为止我从中尝试的所有内容都与我实际寻找的东西相去甚远,我什至不确定我得到了什么。

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

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

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

相关内容

  • 没有找到相关文章

最新更新