小编Dav*_* R.的帖子

加快C/Rcpp中Dice系数的计算

我需要计算一个相似性度量,在R中的大矩阵(600,000 x 500)的二进制向量上调用Dice系数.对于速度,我使用C/Rcpp.该功能运行良好但由于我不是背景的计算机科学家,我想知道它是否可以运行得更快.此代码适用于并行化,但我没有经验并行化C代码.

骰子系数是相似性/不相似性的简单度量(取决于你如何看待它).它旨在比较不对称二元向量,意味着组合中的一个(通常为0-0)不重要,并且协议(1-1对)具有比不一致(1-0或0-1对)更多的权重.想象一下下面的列联表:

   1    0
1  a    b
0  c    d
Run Code Online (Sandbox Code Playgroud)

骰子系数为:(2*a)/(2*a + b + c)

这是我的Rcpp实现:

library(Rcpp)
cppFunction('
    NumericMatrix dice(NumericMatrix binaryMat){
        int nrows = binaryMat.nrow(), ncols = binaryMat.ncol();
        NumericMatrix results(ncols, ncols);
        for(int i=0; i < ncols-1; i++){ // columns fixed
            for(int j=i+1; j < ncols; j++){ // columns moving
                double a = 0;
                double d = 0;
                for (int l = 0; l < nrows; l++) {
                    if(binaryMat(l, i)>0){
                        if(binaryMat(l, j)>0){
                            a++;
                        }
                    }else{
                        if(binaryMat(l, j)<1){
                            d++;
                        } …
Run Code Online (Sandbox Code Playgroud)

c++ algorithm performance r rcpp

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

标签 统计

algorithm ×1

c++ ×1

performance ×1

r ×1

rcpp ×1