我正在尝试优化一些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)
}
)