Как ускорить преобразование данных XTS в DatatimeVector в Rcpp?

Я использую Rcpp для анализа данных XTS и получаю его временной индекс, используя следующий код rcpp:

#include <Rcpp.h>
using namespace Rcpp;
using namespace std;

// [[Rcpp::export]]
DatetimeVector xtsIndex(NumericMatrix X)
{
DatetimeVector v(NumericVector(X.attr("index")));
return v;
}

DatetimeVector tmpindexDaily = xtsIndex(askDailymat);  // Get xts index to Rcpp vector

Оказывается, что это преобразование занимает 2 мс для выполнения с определенным набором данных, где мне нужен только индекс времени, без этого кода это занимает менее 100 микросекунд.
Есть ли способ лучше оптимизировать конверсию или полностью ее избежать.

1

Решение

Вы можете быть лучше, просто используя NumericVector с надлежащим атрибутом класса. Вот быстрая разовая функция, которую я использовал несколько недель назад в другом проекте:

Rcpp::NumericVector createPOSIXtVector(const std::vector<double> & ticks,
const std::string tz) {
Rcpp::NumericVector pt(ticks.begin(), ticks.end());
pt.attr("class") = Rcpp::CharacterVector::create("POSIXct", "POSIXt");
pt.attr("tzone") = tz;
return pt;
}

Вы можете начать аналогичным образом из других контейнеров, столбцов матрицы, векторов, … которые могут содержать double ценности и использовать тот факт, что время (POSIXct) время действительно дробное double с эпохи. Здесь мы получили std::vector<double> из другого API, поэтому преобразование довольно дешево.

4

Другие решения


По вопросам рекламы [email protected]