def generate(self): """ Generate a Kronecker graph using the adjacency matrix of the input graph. :returns: The generate graph as a SparseGraph object. """ W = self.initialGraph.adjacencyMatrix() Wi = W for i in range(1, self.k): Wi = np.kron(Wi, W) vList = VertexList(Wi.shape[0], 0) graph = SparseGraph(vList, self.initialGraph.isUndirected()) graph.setWeightMatrix(Wi) return graph
def generateGraph(self): """ Generate a Kronecker graph """ W = self.initialGraph.getWeightMatrix() Wi = W for i in range(1, self.k): Wi = numpy.kron(Wi, W) P = numpy.random.rand(Wi.shape[0], Wi.shape[0]) Wi = numpy.array(P < Wi, numpy.float64) vList = VertexList(Wi.shape[0], 0) graph = SparseGraph(vList, self.initialGraph.isUndirected()) graph.setWeightMatrix(Wi) return graph
def generateGraph(self): """ Generate a Kronecker graph """ W = self.initialGraph.getWeightMatrix() Wi = W for i in range(1, self.k): Wi = numpy.kron(Wi, W) P = numpy.random.rand(Wi.shape[0], Wi.shape[0]) Wi = numpy.array(P < Wi, numpy.float64) vList = VertexList(Wi.shape[0], 0) graph = SparseGraph(vList, self.initialGraph.isUndirected()) graph.setWeightMatrix(Wi) return graph
def testClusterOnIncreasingGraphs(self): #Create a large graph and try the clustering. numClusters = 3 ClusterSize = 30 numFeatures = 0 pNoise = 0 pClust = 1 numVertices = numClusters*ClusterSize vList = GeneralVertexList(numVertices) vList = VertexList(numVertices, numFeatures) graph = SparseGraph(vList) # ell = 2 # m = 2 # generator = BarabasiAlbertGenerator(ell, m) # graph = generator.generate(graph) #Generate matrix of probabilities W = numpy.ones((numVertices, numVertices))*pNoise for i in range(numClusters): W[ClusterSize*i:ClusterSize*(i+1), ClusterSize*i:ClusterSize*(i+1)] = pClust P = numpy.random.rand(numVertices, numVertices) W = numpy.array(P < W, numpy.float) upTriInds = numpy.triu_indices(numVertices) W[upTriInds] = 0 W = W + W.T graph = SparseGraph(vList) graph.setWeightMatrix(W) indices = numpy.random.permutation(numVertices) subgraphIndicesList = [indices[0:numVertices/2], indices] k1 = numClusters k2 = 10 clusterer = IterativeSpectralClustering(k1, k2) #Test full computation of eigenvectors graphIterator = IncreasingSubgraphListIterator(graph, subgraphIndicesList) clustersList = clusterer.clusterFromIterator(graphIterator, False) self.assertEquals(len(clustersList), len(subgraphIndicesList)) for i in range(len(clustersList)): clusters = clustersList[i] self.assertEquals(len(subgraphIndicesList[i]), len(clusters)) #print(clusters) #Test full computation of eigenvectors with iterator graphIterator = IncreasingSubgraphListIterator(graph, subgraphIndicesList) clustersList = clusterer.clusterFromIterator(graphIterator, False) self.assertEquals(len(clustersList), len(subgraphIndicesList)) for i in range(len(clustersList)): clusters = clustersList[i] self.assertEquals(len(subgraphIndicesList[i]), len(clusters)) #print(clusters) #Now test approximation of eigenvectors with iterator graphIterator = IncreasingSubgraphListIterator(graph, subgraphIndicesList) clustersList2 = clusterer.clusterFromIterator(graphIterator) for i in range(len(clustersList2)): clusters = clustersList2[i] self.assertEquals(len(subgraphIndicesList[i]), len(clusters)) #print(clusters) #Test case where 2 graphs are identical subgraphIndicesList = [] subgraphIndicesList.append(range(graph.getNumVertices())) subgraphIndicesList.append(range(graph.getNumVertices())) graphIterator = IncreasingSubgraphListIterator(graph, subgraphIndicesList) clustersList = clusterer.clusterFromIterator(graphIterator, True)