Hi, 1. assign an edge weight of 1 to each edge 2. Use contract.vertices with the membership vector of your community structure to contract each community to a single vertex. Then simplify the graph and tell igraph to sum the edge weights when it merges multiple edges into a single one during simplification.
3. The edge weights in the contracted graph will tell you rhe number of edges between the communities in the original graph. T. > On 25 Nov 2014, at 21:22, Fatemeh a <[email protected]> wrote: > > Hi, > > I would appreciate if some one could help me to speed up this piece of code : > > what I am trying to do is to calculate the number of edges on the boundary of > community S but it is really slow. > > numberofedge<-function(graph,community) > { > cs <- data.frame(combn(unique(membership(community)),2)) #----considering a > combination of communities two by two > cx <- sapply(cs, function(x) { #calculating edges in between two communities > es<-E(graph)[V(graph)[membership(community)==x[1]] %--% > V(graph)[membership(community)==x[2]]] > length(es)}) > y=cbind(t(cs),cx) > i=1 > CS=array( data=0,dim = length(unique(membership(community)))) > while (i<length(y[,1])+1){ # calculating the edges on the boundary for > each community > CS[y[i,1]]=CS[y[i,1]]+y[i,3] > CS[y[i,2]]=CS[y[i,2]]+y[i,3] > i=i+1 > } > > > -- > regards > F..A > > _______________________________________________ > igraph-help mailing list > [email protected] > https://lists.nongnu.org/mailman/listinfo/igraph-help
_______________________________________________ igraph-help mailing list [email protected] https://lists.nongnu.org/mailman/listinfo/igraph-help
