J'écris une application python qui fera un usage intensif d'une structure de données de graphique. Rien d'horriblement complexe, mais je pense qu'une sorte de bibliothèque de graphes / graphes-algorithmes pourrait m'aider. J'ai fait des recherches sur Google, mais je ne trouve rien qui me saute particulièrement aux yeux.
Amoss, je cherchais une bibliothèque de graphes qui pourrait calculer les chemins les plus courts en fonction des poids. Des trucs de base, vraiment. J'ai fini par aller avec networkx. Cela fonctionne plutôt bien. Je n'ai pas touché au projet depuis un moment, cependant. Cette question a été posée il y a plus d'un an.
cpatrick
108
Il est scandaleusement étrange qu'il y ait des questions aussi utiles et que beaucoup de votes comme celui-ci puissent être classés comme "non constructifs".
Jim Raynor
1
Vous pouvez également utiliser une "base de données de graphes natifs" comme neo4j, puis utiliser une liaison python pour discuter avec la base de données?
Un STEFANI
3
@JimRaynor "Pas constructif" était un vieux fourre-tout. Les raisons proches ont été mises à jour pour mieux (pas parfaitement, mais mieux) couvrir l'utilisation prévue. Aujourd'hui, cela serait clos en tant que question de recommandation.
J'aime NetworkX, mais j'ai aussi lu de bonnes choses sur igraph. J'utilise régulièrement NetworkX avec des graphiques avec 1 million de nœuds sans problème (c'est environ le double de la surcharge d'un dict de taille V + E)
Si vous voulez une comparaison des fonctionnalités, voyez-le dans la liste Networkx-discuter
En particulier, ce que j'aime chez Networkx .... c'est principalement en python, facile à éditer et à comprendre le code source, et il se sent surtout "pythonique".
Gregg Lind
1
Je me demandais, l'avez-vous utilisé avec un * ou des algorithmes similaires?
dassouki
4
Je viens d'évaluer les deux. networkxest installable via pip, alors qu'il igraphne l'est pas. Cela rend igraphplus difficile à utiliser comme dépendances dans vos setup.pyfichiers.
exhuma
3
En tant que mise à jour pour 2013, je vais avec networkx juste b / c, il a un github et regarde le plus à jour de toutes les options de cette réponse et des autres
Je voudrais brancher ma propre bibliothèque de graph python: graph-tool .
Il est très rapide, car il est implémenté en C ++ avec la bibliothèque de graphiques Boost, et il contient de nombreux algorithmes et une documentation complète.
+1 Pour l'outil graphique. Nous l'avons utilisé dans notre laboratoire. C'est vraiment rapide par rapport aux autres bibliothèques python. En outre, dessiner et afficher un graphique est assez génial dans graph-tool. Il faut cependant beaucoup de temps pour compiler!
Dilawar
5
Pas de support Windows malheureusement :(
Mike Chaliy
2
@TiagoPeixoto Cela semble tellement prometteur mais ne peut pas être utilisé sur Windows. Je suis coincé avec NetworkX, le trouvant trop lent.
Naman
2
@ColonelPanic Ceci est une FAQ, voir graph-tool.skewed.de/download : "La réponse courte est que cela ne peut pas être fait, car graph-tool dépend de façon cruciale de certaines (excellentes) bibliothèques C ++ telles que Boost, qui sont non installable via pip. "
Tiago Peixoto
32
Avez-vous regardé python-graph ? Je ne l'ai pas utilisé moi-même, mais la page du projet semble prometteuse.
Gentil dehmann, je suis allé pour ça en premier (étant un programmeur C ++ de métier et un coup de fouet absolument amoureux), mais cela me fait peur: les liaisons BGL-Python ne sont plus maintenues <un haut de page>
cpatrick
3
Regardez plutôt graph-tool, il est basé sur bgl et actif.
J'appuie la suggestion de zweiterlinde d'utiliser python-graph. Je l'ai utilisé comme base d'un projet de recherche graphique sur lequel je travaille. La bibliothèque est bien écrite, stable et possède une bonne interface. Les auteurs répondent également rapidement aux demandes de renseignements et aux rapports.
Réponses:
Il y a deux excellents choix:
NetworkX
et
igraph
J'aime NetworkX, mais j'ai aussi lu de bonnes choses sur igraph. J'utilise régulièrement NetworkX avec des graphiques avec 1 million de nœuds sans problème (c'est environ le double de la surcharge d'un dict de taille V + E)
Si vous voulez une comparaison des fonctionnalités, voyez-le dans la liste Networkx-discuter
Fil de comparaison des fonctionnalités
la source
networkx
est installable viapip
, alors qu'iligraph
ne l'est pas. Cela rendigraph
plus difficile à utiliser comme dépendances dans vossetup.py
fichiers.Je voudrais brancher ma propre bibliothèque de graph python: graph-tool .
Il est très rapide, car il est implémenté en C ++ avec la bibliothèque de graphiques Boost, et il contient de nombreux algorithmes et une documentation complète.
la source
Avez-vous regardé python-graph ? Je ne l'ai pas utilisé moi-même, mais la page du projet semble prometteuse.
la source
Aussi, vous voudrez peut-être jeter un œil à NetworkX
la source
Utilisez la bibliothèque de graphiques Boost - Liaisons Python .
la source
Jetez un œil à cette page sur l'implémentation de graphes en python .
Vous pouvez également jeter un œil à pygraphlib sur sourceforge.
la source
J'ai le plus de chance avec pydot. Certains des autres sont difficiles à installer et à configurer sur différentes plateformes comme Win 7.
http://code.google.com/p/pydot/
la source
J'appuie la suggestion de zweiterlinde d'utiliser python-graph. Je l'ai utilisé comme base d'un projet de recherche graphique sur lequel je travaille. La bibliothèque est bien écrite, stable et possède une bonne interface. Les auteurs répondent également rapidement aux demandes de renseignements et aux rapports.
la source