[英]construct graph from python set type
简短的问题是,是否有一个自函数来从一组python集制作图形? 更长的问题:我有几个python集。 它们各自重叠,或者有些是其他的子集。 我想制作一个图(如在节点和边中),节点是集合中的元素。 边缘是集合的交点,并按集合交点中的元素数量加权。 有几个用于python的图形软件包。 (NetworkX,igraph,...)我对其中任何一个的使用都不熟悉。 他们中的任何一个都可以直接从集合列表(例如MakeGraphfromSets(alistofsets))中绘制图形吗?如果不知道,您会知道一个如何使用集合列表定义边的示例。 实际上看起来似乎很简单,但是总是有一个很好的例子。
编写自己的代码并不难:
def intersection_graph(sets):
adjacency_list = {}
for i, s1 in enumerate(sets):
for j, s2 in enumerate(sets):
if j == i:
continue
try:
lst = adjacency_list[i]
except KeyError:
adjacency_list[i] = lst = []
weight = len(s1.intersection(s2))
lst.append( (j, weight) )
return adjacency_list
该函数为每个集合编号,并在sets
包含其索引。 我们这样做是因为dict键必须是不可变的,这对于整数是正确的,但对于集合则无效。
这是如何使用此功能的示例,它的输出是:
>>> sets = [set([1,2,3]), set([2,3,4]), set([4,2])]
>>> intersection_graph(sets)
{0: [(1, 2), (2, 1)], 1: [(0, 2), (2, 2)], 2: [(0, 1), (1, 2)]}
def MakeGraphfromSets(sets):
egs = []
l = len(sets)
for i in range(l):
for j in range(i,l):
w = sets[i].intersection(sets[j])
egs.append((i,j,len(w)))
return egs
# (source set index,destination set index,length of intersection)
sets = [set([1,2,3]), set([2,3,4]), set([4,2])]
edges = MakeGraphfromSets(sets)
for e in edges:
print e
OUTPUT:
(0, 0, 3)
(0, 1, 2)
(0, 2, 1)
(1, 1, 3)
(1, 2, 2)
(2, 2, 2)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.