小编Alv*_*vin的帖子

如何在C++/Rcpp中进行快速百分位数计算

我有一个包含一堆双元素的大向量.给定一个百分位向量的数组,例如percentile_vec = c(0.90, 0.91, 0.92, 0.93, 0.94, 0.95).我目前正在使用Rcpp sort函数对大向量进行排序,然后找到相应的百分位值.这是主要代码:

// [[Rcpp::export]]
NumericVector sort_rcpp(Rcpp::NumericVector& x)
{
  std::vector<double> tmp = Rcpp::as<std::vector<double>> (x);    // or NumericVector tmp = clone(x);
  std::sort(tmp.begin(), tmp.end());
  return wrap(tmp);
}

// [[Rcpp::export]]
NumericVector percentile_rcpp(Rcpp::NumericVector& x, Rcpp::NumericVector& percentile)
{
  NumericVector tmp_sort = sort_rcpp(x);
  int size_per = percentile.size();
  NumericVector percentile_vec = no_init(size_per);
  for (int ii = 0; ii < size_per; ii++)
  {
    double size_per = tmp_sort.size() * percentile[ii];
    double size_per_round;
    if (size_per < 1.0)
    {
      size_per_round = 1.0; …
Run Code Online (Sandbox Code Playgroud)

c++ r armadillo rcpp

7
推荐指数
1
解决办法
2742
查看次数

如何在RcppParallel中调用用户定义的函数?

受艺术http://gallery.rcpp.org/articles/parallel-distance-matrix/的启发,我尝试使用RcppParallel在高维参数空间中运行强力搜索,以便使用多线程进行回测.我陷入了如何在部件中调用自定义函数的问题struct.这个想法是这样的:

首先,首先NumericMatrix params_mat在R中创建一个参数矩阵,然后使用带有List, NumericVector, CharacterVector数据类型的回测数据,例如List Data_1, NumericVector Data_2, CharacterVector Data_3, ...,对于每个参数场景都是静态的params_vec(注意它是行的params_mat).

接下来,定义返回测试函数,该函数输出包含3个关键变量的向量以评估策略性能.

这是我的一个例子params_mat,并Backtesting_Fun可以在R和RCPP,分别运行.

//[[Rcpp::export]]
NumericMatrix data_frame_rcpp(const Rcpp::List& list_params) 
{
  NumericMatrix res = list_params[0];
  return res;
}

# R codes to generate params_mat
params <- expand.grid (x_1=seq(1,100,1), x_2=seq(3,100,2), ..., x_n=seq(4,200,1));                           
list_params = list(ts(params));
tmp_params_data = data_frame_rcpp(list_params);                                              
params_mat = matrix(tmp_params_data, ncol = ncol(tmp_params_data), dimnames = NULL); 
params_vec = params_mat[ii,];

# User-defined Rcpp codes for …
Run Code Online (Sandbox Code Playgroud)

c++ parallel-processing r rcpp

6
推荐指数
1
解决办法
1098
查看次数

如何有效地将NumericVectors列表组合成一个大的NumericVector?

我编写了以下编译的Rcpp代码,但速度并不像预期的那么快.

// [[Rcpp::export]]
NumericVector combine_list_to_vec (const Rcpp::List& list)
{
  int list_size = list.size();
  int large_vec_size = 0;
  IntegerVector start_index(list_size);
  IntegerVector end_index(list_size);
  for (int ii = 0; ii < list_size; ii++)
  {
    NumericVector vec = list[ii];
    start_index[ii] = large_vec_size;
    large_vec_size += vec.size();
    end_index[ii] = large_vec_size - 1;
  }
  NumericVector large_vec(large_vec_size);   // Creating object after getting its size
  for (int ii = 0; ii < list_size; ii++)
  {
    int current_start_index = start_index[ii];
    NumericVector vec = list[ii];
    for (int jj = 0; jj …
Run Code Online (Sandbox Code Playgroud)

c++ r rcpp

3
推荐指数
1
解决办法
1268
查看次数

声明后如何将NumericVector初始化为特定大小?

我编写了以下Rcpp代码,该代码可以编译,但未给出预期的结果。

    // [[Rcpp::export]]
RObject test_1 (Rcpp::NumericVector& x)
{
  NumericVector x1;
  if (x.size() < 5)
  {
    NumericVector x1(x.size()*3);
    for (int ii = 0; ii < x.size(); ii++)
    {
      x1[ii] = sqrt(x[ii]);
    }
  }
  else
  {
    NumericVector x1(x.size()*2);
    for (int ii = 0; ii < x.size(); ii++)
    {
      x1[ii] = sqrt(x[ii]);
    }
  }
  return x1;
}
Run Code Online (Sandbox Code Playgroud)

x1,返回向量在if语句外部声明,其中返回向量x1的大小可以变化。但是,如果我声明NumericVector的大小,它将创建一个新对象,但是x1在空向量中返回。

以下代码有效:

// [[Rcpp::export]]
RObject test (const Rcpp::NumericVector& x)
{
  NumericVector x1;
  if (x.size() < 5)
  {
    NumericVector tmp(x.size()*3);
    for (int ii = 0; ii < …
Run Code Online (Sandbox Code Playgroud)

c++ r rcpp

2
推荐指数
1
解决办法
3833
查看次数

标签 统计

c++ ×4

r ×4

rcpp ×4

armadillo ×1

parallel-processing ×1