Question

La question courte, est-il un au large de la fonction d'auto pour faire un graphique à partir d'une collection de jeux de python? La question plus: J'ai plusieurs ensembles de python. Ils se chevauchent chaque ou certains sont sous ensembles d'autres. Je souhaite faire un graphique (comme dans les noeuds et arêtes) noeuds sont les éléments dans les ensembles. Les bords sont intersection des ensembles avec pondérée par le nombre d'éléments dans l'intersection des ensembles. Il y a plusieurs paquets pour python graphiques. (NetworkX, igraph, ...) Je ne suis pas au courant de l'utilisation de l'un d'eux. Est-ce que l'un d'eux faire un graphique directement à partir d'une liste des ensembles c.-à-MakeGraphfromSets (alistofsets) Sinon connaissez-vous d'un exemple de la façon de prendre la liste des jeux pour définir les bords. Il semble en fait que ça pourrait être simple, mais un exemple est toujours bon d'avoir.

Était-ce utile?

La solution

Il est pas trop difficile pour vous le code:

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

Ce numéro de chaque fonction set et son index dans sets. Nous faisons cela parce que les clés de dict doit être immuable, ce qui est vrai des entiers, mais pas ensembles.

Voici un exemple de la façon d'utiliser cette fonction, et sa sortie:

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

Autres conseils

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

SORTIE:

(0, 0, 3)
(0, 1, 2)
(0, 2, 1)
(1, 1, 3)
(1, 2, 2)
(2, 2, 2)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top