小编Seb*_*ian的帖子

单个 For 循环中的 OpenMP SIMD 多重归约(总和、最小值和最大值)

我有以下循环来计算 C++ 中的基本汇总统计数据(平均值、标准差、最小值和最大值),跳过缺失值(x 是双向量):

int k = 0;
long double sum = 0.0, sq_sum = 0.0;
double minv = 1.0/0.0, maxv = -1.0/0.0;

#pragma omp simd reduction(+:sum,sq_sum,k) reduction(max:maxv) reduction(min:minv)
for (int i = 0; i < n; ++i) {
  double xi = x[i];
  int tmp = xi == xi;
  sum += tmp ? xi : 0.0;
  sq_sum += tmp ? xi * xi : 0.0;
  k += tmp ? 1 : 0;
  minv = minv > xi ? xi : …
Run Code Online (Sandbox Code Playgroud)

c c++ simd openmp

4
推荐指数
1
解决办法
149
查看次数

RCPP快速统计模式功能,任何类型的向量输入

我正在尝试为R构建超快速模式函数,以用于汇总大型分类数据集。该函数应采用所有支持的R类型的向量输入并返回模式。我已经阅读了本帖子本帮助页面和其他内容,但是我无法使该函数接受所有R数据类型。我的代码现在适用于数值向量,我依赖于Rcpp糖包装函数:

#include <Rcpp.h>

using namespace Rcpp;

// [[Rcpp::export]]
int Mode(NumericVector x, bool narm = false) 
{
    if (narm) x = x[!is_na(x)];
    NumericVector ux = unique(x);
    int y = ux[which_max(table(match(x, ux)))];
    return y;
}
Run Code Online (Sandbox Code Playgroud)

另外,我想知道' narm '参数是否可以重命名为' na.rm '而不会给出错误,当然,如果有更快的方法来用C ++编写模式函数,我将不胜感激。

c++ r rcpp

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

标签 统计

c++ ×2

c ×1

openmp ×1

r ×1

rcpp ×1

simd ×1