0
我想用Rcpp重寫一個昂貴的R函數。當我對這個主題不熟悉時,我嘗試了一些非常簡單的東西。 我寫了下面的功能:加速一個奇怪的慢Rcpp函數
Rcpp::cppFunction('
std::vector<int> test_C(double a) {
std::vector<int> indices;
indices.reserve(2);
indices.push_back(a);
indices.push_back(a);
return (indices);
}
')
現在,所有的工作就很好的結果。但它需要0.1秒(這對於這個任務當然是太多了)。以前我有
Rcpp::cppFunction('
NumericVector test_C(double a) {
NumericVector indices(2);
indices[0] = a;
indices[1] = a;
return (indices);
}
')
這同樣緩慢。我懷疑這是我的系統故障。我在R: Getting indices of elements in a sorted vector的答案中嘗試了Rcpp代碼,該代碼計算了數值向量v(我的測試中長度爲10e7)的哪個[v> a] [1]和一個double a,它的工作速度非常快。
任何暗示我做錯了什麼?
請包含代碼的R部分。你循環和應用這個函數到你的循環的每個元素?第二個函數在我的系統上運行1微秒,這接近Rcpp函數的微不足道的評估時間。 – BrodieG
我很好奇你爲什麼要用double來填充一個整數向量。 – nrussell
nrussell:哦,沒道理。我改變了它,速度沒有增加。無論如何,NumericVector的版本也很慢。 –