近似函数的矩阵应用可加快线性插值

时间:2018-06-21 22:24:27

标签: r performance apply prediction

我有一个在测量日期的值的数据框,我需要对其进行预测/内插到大型矩阵中的新日期。目前,我正在使用approxfun()创建新的插值函数,然后对矩阵中的每一行都使用apply()。问题是,我的矩阵很大,apply()approxfun()的速度很慢。我将在优化例程中使用它,因此速度是一个问题。同样,apply()命令的结果将需要转换。有没有更好的方法可以对新数据的每一行进行插值预测,而无需使用apply()或类似方法?我还拥有原始日期范围之外的新数据,因此approxfun()可以解决此问题,但是也许还有其他选择吗?

library(microbenchmark)

# input data
Date <- c(2015, 2014.5, 2014, 2013.5, 2013, 2012.5, 2012, 2011.5, 2011)
CFC11 <- c(227.346, 228.718, 230.202, 231.419, 232.786, 234.177, 235.506, 236.463, 237.423)
Input <- data.frame(Date, CFC11)

# New Dates
Well1 <- c(2015.6, 2014.2, 2013.1)
Well2 <- c(2013.7, 2011.9, 2010)
NDates <- rbind(Well1, Well2)
NDates <- matrix(NDates, nrow = 2, ncol = 3)

# Input function
CFC11fun <- approxfun(Input$Date,Input$CFC11,rule=2)

# Apply the input function to the dates to get the input at the new dates 
# rowwise
# this transposes the result, so I would need to transpose it back
t(apply(NDates,1,CFC11fun))

# looks at timing
microbenchmark(t(apply(NDates,1,CFC11fun)), times = 1000, unit = "us")

1 个答案:

答案 0 :(得分:2)

只需在整个矩阵上调用函数,然后将结果整形为尺寸相同的矩阵即可:

matrix(CFC11fun(NDates), nrow=nrow(NDates))