我有一个组成值0、1和2的矩阵。值的99%为0。该矩阵有100万行和700列。每行至少有一个非零值。
我需要使用此公式计算每对列之间的距离,以计算x和y之间的距离:D =(Sum(| xi-yi |)/ 2L,i从1到L,L = 1百万,即数量行。
我写了一段R代码,但是计算时间太长,是否可以使用动态编程更快地完成它?这是我的代码:
#mac is the matrix
nCols=ncol(mac)
nRows=nrow(mac)
#the pairwise distance matrix
distMat=matrix(data=-1,nrow=nCols,ncol=nCols)
abs.dist=function(x){return(abs(x[1]-x[2]))}
for(i in 1:(nCols-1)){
for(j in (i+1):nCols){
d1=apply(mac[,c(i,j),1,abs.dist)
k=sum(d1)/(2*nRows)
distMat[i,j]=k
distMat[j,i]=k
}
}
for(i in 1:nCols) distMat[i,i]=0
非常感谢您的帮助?
我将总结一下评论中已经包含的内容:
#mac is the matrix
nCols=ncol(mac)
nRows=nrow(mac)
#the pairwise distance matrix
distMat=matrix(data=-1,nrow=nCols,ncol=nCols)
for(i in 1:(nCols-1)){
for(j in (i+1):nCols){
d1=abs(mac[,i]-mac[,j])
k=sum(d1)/(2*nRows)
distMat[i,j]=k
distMat[j,i]=k
}
}
diag(distMat) <- 0
对于2000x500矩阵,这大约快100倍。1e6x700矩阵花了大约半分钟。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句