如何在 Rcpp 中加快 xts 数据到 Datetime Vector 的转换?
How to speedup the xts data conversion to DatatimeVector in 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 微秒。
有什么方法可以更好地优化转换或完全避免转换。
您最好只使用具有适当 class 属性的 NumericVector
。这是我几周前使用的一个快速一次性函数 in another project:
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
自纪元以来。这里我们从另一个 API 得到了一个 std::vector<double>
,所以转换非常便宜。
我正在使用 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 微秒。 有什么方法可以更好地优化转换或完全避免转换。
您最好只使用具有适当 class 属性的 NumericVector
。这是我几周前使用的一个快速一次性函数 in another project:
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
自纪元以来。这里我们从另一个 API 得到了一个 std::vector<double>
,所以转换非常便宜。