如何在R中划分矢量,使得块的总和相同

时间:2017-03-24 20:01:44

标签: r parallel-processing

我正在尝试优化一些R代码来计算非常大的矩阵中的欧氏距离(大于dist允许的距离)。为了加快这个过程,我发送矩阵的哪一列来使用doParallel计算colSums对矩阵。 然而,当并行化时,这是低效的,因为矩阵的最后一列非常小。所以我试图通过将计算分成大致相同数量的计算段来优化代码。理想情况下,我会将此除以使得从1到nCols的向量之和具有相同的总和,但这是我可以收集的NP复杂问题。有没有其他方法可以获得类似的结果?

我的代码如下:

library(doParallel)

ncores <- 140
cl<-makeCluster(ncores)
registerDoParallel(cl)

#number of samples
samples <- 10000
#number of markers
markers <- 160000

#input markers matrix
A <- matrix(1:5, ncol=samples,nrow=markers, byrow=T)
btime <- system.time(
  bresult<-foreach(x=1:(ncol(A)-1),.combine="c",.multicombine=T,.inorder=T) %dopar% {
      colSums(as.matrix(A[,x]-A[,(x+1):ncol(A)])^2,na.rm = T)
  }
)

0 个答案:

没有答案