本文整理汇总了Python中igraph.Graph.edge_weights方法的典型用法代码示例。如果您正苦于以下问题:Python Graph.edge_weights方法的具体用法?Python Graph.edge_weights怎么用?Python Graph.edge_weights使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类igraph.Graph
的用法示例。
在下文中一共展示了Graph.edge_weights方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: detect_communities
# 需要导入模块: from igraph import Graph [as 别名]
# 或者: from igraph.Graph import edge_weights [as 别名]
def detect_communities(args):
log = logging.getLogger("cmd")
ccsmodel = ConnectedComponentsModel().load(args.input)
log.info("Building the connected components")
ccs = defaultdict(list)
for i, c in enumerate(ccsmodel.id_to_cc):
ccs[c].append(i)
buckmat = ccsmodel.id_to_buckets
buckindices = buckmat.indices
buckindptr = buckmat.indptr
total_nvertices = buckmat.shape[0]
linear = args.edges in ("linear", "1")
graphs = []
communities = []
if not linear:
log.info("Transposing the matrix")
buckmat_csc = buckmat.T.tocsr()
fat_ccs = []
for vertices in ccs.values():
if len(vertices) == 1:
continue
if len(vertices) == 2:
communities.append(vertices)
continue
fat_ccs.append(vertices)
log.info("Building %d graphs", len(fat_ccs))
for vertices in progress_bar(fat_ccs, log, expected_size=len(fat_ccs)):
if linear:
edges = []
weights = []
bucket_weights = buckmat.sum(axis=0)
buckets = set()
for i in vertices:
for j in range(buckindptr[i], buckindptr[i + 1]):
bucket = buckindices[j]
weights.append(bucket_weights[0, bucket])
bucket += total_nvertices
buckets.add(bucket)
edges.append((str(i), str(bucket)))
else:
edges = set()
weights = None
buckets = set()
for i in vertices:
for j in range(buckindptr[i], buckindptr[i + 1]):
buckets.add(buckindices[j])
for bucket in buckets:
buckverts = \
buckmat_csc.indices[buckmat_csc.indptr[bucket]:buckmat_csc.indptr[bucket + 1]]
for i, x in enumerate(buckverts):
for y in buckverts:
if x < y:
edges.add((str(x), str(y)))
buckets.clear()
edges = list(edges)
graph = Graph(directed=False)
graph.add_vertices(list(map(str, vertices + list(buckets))))
graph.add_edges(edges)
graph.edge_weights = weights
graphs.append(graph)
log.info("Launching the community detection")
detector = CommunityDetector(algorithm=args.algorithm, config=args.params)
if not args.no_spark:
spark = create_spark("cmd-%s" % uuid4(), **args.__dict__).sparkContext
communities.extend(spark.parallelize(graphs).flatMap(detector).collect())
else:
communities.extend(chain.from_iterable(progress_bar(
(detector(g) for g in graphs), log, expected_size=len(graphs))))
log.info("Overall communities: %d", len(communities))
log.info("Average community size: %.1f", numpy.mean([len(c) for c in communities]))
log.info("Median community size: %.1f", numpy.median([len(c) for c in communities]))
log.info("Max community size: %d", max(map(len, communities)))
log.info("Writing %s", args.output)
CommunitiesModel().construct(communities, ccsmodel.id_to_element).save(args.output)