减少简单功能的计算时间

时间:2018-02-22 17:43:01

标签: r

我有一个简单的功能,被称为数百次。有没有办法提高计算速度?

# the input variable (y) is a scalar
my_function <- function(y){
 ret_value <- 0.5*((max(0,y)**2)-(3*max(0,y-1)**2)+(3*max(0,y-2)**2)-(max(0,y-3)**2))
 return(ret_value)
}

我已尝试使用if&amp; else if语句,导致计算时间略长。

我还阅读了很多关于rcpp包的内容,但我的理解是,C ++实现主要用于更复杂的结构,如递归和多循环。不确定我的这么简单的功能是否会有任何改进。

编辑:父函数如下,因此,矢量化可能是最好的主意。什么是最好/最快的方式?

val1 <- 0.9
val2 <- 0.7
F_val <- 1
loop_seq <- c(1, 2, 3)
for(i in loop_seq){
 for(j in loop_seq){
  F_val <- F_val + my_function(val1-i)*my_function(val2-j)
 }
}

我目前的解决方案如下,但我并没有真正提高速度:

ret_value <- 0.5*apply(matrix(pmax(0,rep(y_vec,each=4)+c(0,-1,-2,-3))^2*c(1,-3,3,-1), ncol=length(y_vec)),2,sum)

0 个答案:

没有答案