我想生成时间间隔值 - 给定一个向量,如20、30、69、89、200,每对之间的差异是多少?
数据集有2500万个元素,因此我研究了R和RCpp两种解决方案 - 速度很重要。 R的实现如下:
intertime <- function(x){
output <- x[2:length(x)] - x[1:(length(x)-1)]
return(output)
}
C++ 实现:
NumericVector intertime(NumericVector timestamps) {
//Identify size of input object
int input_size = timestamps.size();
//Instantiate output object
NumericVector output(input_size-1);
//Loop over the data
for(int i = 1; i < input_size;++i){
//For each entry, the output value is [entry] minus [previous entry]
output[i-1] = (timestamps[i] - timestamps[i-1]);
}
//Return
return output;
}
C++实现比R实现快约一个数量级。我知道R在向量化操作方面进行了优化,所以速度差异如此之小不应该让我太惊讶,但是:有没有人能想到一种更有效的在Rcpp/C++中执行这些操作的方法?请注意,内容中保留了html标签。
diff(x)
可能是你想要的吗? - Tyler Rinkerdiff
应该比你的R函数慢。 - Roland