我需要计算一个相似性度量,在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)