Domanda

La breve domanda, c'è un off la funzione di auto per fare un grafico da un insieme di insiemi di pitone? La domanda più: ho diversi set di pitone. Ognuno di essi si sovrappongono o alcuni sono gruppi secondari degli altri. Vorrei fare un grafico (come in nodi e bordi) nodi sono gli elementi negli insiemi. I bordi sono intersezione degli insiemi con ponderata per il numero di elementi nella intersezione degli insiemi. Ci sono diversi pacchetti di grafici per Python. (NetworkX, IGRAPH, ...) non ho familiarità con l'uso di uno di essi. Qualcuno di loro fare un grafico direttamente da un elenco di gruppi cioè, MakeGraphfromSets (alistofsets) Se non lo sai di un esempio di come prendere la lista dei set per definire i bordi. Sembra in realtà che potrebbe essere semplice, ma un esempio è sempre bene avere.

È stato utile?

Soluzione

Non è troppo difficile da codificare da soli:

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

Questi numeri funzione ogni insieme con l'indice entro sets. Facciamo questo perché le chiavi dict devono essere immutabili, che è vero per gli interi, ma non imposta.

Ecco un esempio di come utilizzare questa funzione, e il suo output:

>>> 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)]}

Altri suggerimenti

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

USCITA:

(0, 0, 3)
(0, 1, 2)
(0, 2, 1)
(1, 1, 3)
(1, 2, 2)
(2, 2, 2)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top