在短的问题,是否有关闭自拍功能从蟒集的集合作出的曲线图? 较长的问题:我有几个蟒蛇套。他们每个人都重叠或有些子集他人。我想作的曲线图(如在节点和边)节点在集合中的元素。边缘是集合与通过在集合的交集的元素数加权交集。 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内的索引。我们这样做是因为字典密钥必须是不可变的,这是一个整数,但不集。

下面是一个如何使用此功能的示例,并且它的输出:

>>> 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

输出:

(0, 0, 3)
(0, 1, 2)
(0, 2, 1)
(1, 1, 3)
(1, 2, 2)
(2, 2, 2)
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top