【问题标题】:Problems with sum functions [closed]求和函数的问题[关闭]
【发布时间】:2016-01-27 16:34:11
【问题描述】:

使用其他编程语言加速 R 是一项重大创新,但似乎也很危险。任何统计函数都必须稳定才能使用,给定相同条目的相同结果,例如sumsdcor... 我遇到的问题是使用大量数据(10^8 样本)。我使用 RCPP 和 RCPPPARALLEL 版本的 sum 来演示大数据的错误。

#include <Rcpp.h>
using namespace Rcpp;
/********************************************************
 *           Rcpp inner function :sum
 *******************************************************/
// [[Rcpp::export]]
double RCPPSUM(NumericVector x) {
  return sum(x);
}

/*** R


library("Rcpp")
library("RcppParallel")
  options(digits=22)# showing more details in number  
  sourceCpp(system.file("tests/cpp/sum.cpp", package = "RcppParallel"))
##  Given two function parallelVectorSum  (RcppParallel) and vectorSum (C++STL)
##  We manipulated a very big vector
  x<-rnorm(100000000)
  (RSUM<-sum(x))
  (RCPP<-RCPPSUM(x))
  (RCPPPARALLEL<-parallelVectorSum(x))
  (STD<-vectorSum(x))
  identical(RSUM,RCPP)
  identical(STD,RCPP)
  identical(RSUM,RCPPPARALLEL)
  identical(RCPP,RCPPPARALLEL)
## Simple checking of stability
  v<-0
for(i in 1:100)v[i]<-sum(x)
  (mean(v))
  (sd(v))
####stable sd =0
  for(i in 1:100)v[i]<-vectorSum(x)
    (mean(v))
    (sd(v))
###stable sd =0
  for(i in 1:100)v[i]<-RCPPSUM(x)
  (mean(v))
  (sd(v))
###stable sd =0

  for(i in 1:100)v[i]<-parallelVectorSum(x)
  (mean(v))
  (sd(v))
##instable sd!=0
      */

我们可以将并行版本限定为不稳定,因此将其排除在外。 RCPP和RSUM哪个结果是真的?

【问题讨论】:

  • 请澄清您的问题。
  • 同一个函数有不同的结果
  • 在对这么多数字求和时,您一定会遇到舍入错误。即使是内置的sum 函数在输入被洗牌时也不会给出相同的答案:identical(sum(x),sum(rev(x))) 产生FALSE

标签: r sum rcpp parallels


【解决方案1】:

简单地说:

  1. 推测警报:似乎也很危险。请备份或删除它。
  2. 请显示正确大写的礼貌。我们将其分别写为RcppRcppParallel。虽然我猜你只是指标签,所以这并不重要。
  3. 使用options(digits=22) 很可爱但没用。双精度为您​​提供大约 16 位数字。只希望得到更多并不能给你更多。

【讨论】:

    猜你喜欢
    • 2018-05-14
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 2021-11-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    相关资源
    最近更新 更多