簡體   English   中英

從python set類型構造圖

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM