def getOnePassLouvainCommunities(matrix) : ITER=1 matrixSize=matrix.shape[0] sumsOfWeights=np.array([sum(matrix.getrow(i).data)+sum(matrix.getcol(i).data) for i in range(matrixSize)]) totalSumOfWeight=sum(sumsOfWeights) clusters=np.array(range(0,matrixSize)) modified=True while modified : print " ITER #{0}".format(ITER) ITER+=1 modified=False for i in range(0,matrixSize) : newCluster=LouvainClusterer.getArgMaxModularity(matrix,clusters,sumsOfWeights,totalSumOfWeight,i) if (newCluster!=-1) : modified=True clusters[i]=newCluster newClusterIdentifiers={} clustersNumber=0 for i in range(0,len(clusters)) : if (clusters[i] in newClusterIdentifiers) : clusters[i]=newClusterIdentifiers[clusters[i]] else : newClusterIdentifiers[clusters[i]]=clustersNumber clusters[i]=clustersNumber clustersNumber+=1 print "End of a Pass" print "-"*40 return clustersNumber, clusters
def getOnePassLouvainCommunities(matrix): ITER = 1 matrixSize = matrix.shape[0] sumsOfWeights = np.array([ sum(matrix.getrow(i).data) + sum(matrix.getcol(i).data) for i in range(matrixSize) ]) totalSumOfWeight = sum(sumsOfWeights) clusters = np.array(range(0, matrixSize)) modified = True while modified: print " ITER #{0}".format(ITER) ITER += 1 modified = False for i in range(0, matrixSize): newCluster = LouvainClusterer.getArgMaxModularity( matrix, clusters, sumsOfWeights, totalSumOfWeight, i) if (newCluster != -1): modified = True clusters[i] = newCluster newClusterIdentifiers = {} clustersNumber = 0 for i in range(0, len(clusters)): if (clusters[i] in newClusterIdentifiers): clusters[i] = newClusterIdentifiers[clusters[i]] else: newClusterIdentifiers[clusters[i]] = clustersNumber clusters[i] = clustersNumber clustersNumber += 1 print "End of a Pass" print "-" * 40 return clustersNumber, clusters
def getOnePassLouvainCommunities(matrix): ITER = 1 matrixSize = matrix.shape[0] # on somme les valeurs en colonnes et en lignes pour chaque cluster de la matrice # sumsOfWeights -> liste de matrixSize valeurs sumsOfWeights = np.array([ sum(matrix.getrow(i).data) + sum(matrix.getcol(i).data) for i in range(matrixSize) ]) # totalSumOfWeight -> somme de toutes les valeurs totalSumOfWeight = sum(sumsOfWeights) # on crée une liste de matrixSize valeurs pour representer les clusters # au début on a autant de clusteur que d'elements de la matrice clusters = np.array(range(0, matrixSize)) modified = True # boucle pour agglomérer les elements entre eux while modified: print " ITER #{0}".format(ITER) ITER += 1 modified = False for i in range(0, matrixSize): newCluster = LouvainClusterer.getArgMaxModularity( matrix, clusters, sumsOfWeights, totalSumOfWeight, i) if (newCluster != -1): modified = True clusters[i] = newCluster # on aplique un reduce sur le vecteur clusters pour avoir les vrais clusters # newClusterIdentifiers est une map d'association entre les clusters du vecteur cluster et les nouveaux clusters newClusterIdentifiers = {} clustersNumber = 0 for i in range(0, len(clusters)): if (clusters[i] in newClusterIdentifiers): clusters[i] = newClusterIdentifiers[clusters[i]] else: newClusterIdentifiers[clusters[i]] = clustersNumber clusters[i] = clustersNumber clustersNumber += 1 print "End of a Pass" print "-" * 40 return clustersNumber, clusters