Wie bekomme ich alle Kanten, deren beide Knoten innerhalb einer bestimmten Liste von Knoten sind. G.edges([list_of_nodes])
gibt alle Knoten zurück, bei denen sich mindestens ein Knoten jeder Kante in der list_of_nodes
befindet. Ich möchte das nicht. Wie kann ich es bekommen?erhalten die Kanten innerhalb einer Liste von Knoten
Antwort
Sie können alle bereits gefundenen Kanten durchlaufen und testen, ob beide Knoten in der Liste der Knoten enthalten sind. Dies ist jedoch nicht optimal, wenn die Liste der Knoten groß ist. Die Überprüfung, ob eine Liste ein Element enthält, erfordert ein Durchlaufen der Liste, so dass im Durchschnitt jede Kante 2*len(list)/2
Prüfungen [len(list)/2
für jeden Knoten] benötigt. Unter der Annahme, dass die Anzahl der Kanten proportional zu len(list)
ist, hat dies eine quadratische Zeit.
edges = [(u,v) for u,v in G.edges(list_of_nodes) if u in list_of_nodes and v in list_of_nodes]
Eine effizientere Methode wäre testen, ob die Knoten in einem Satz anstelle einer Liste enthalten sind. Sets ermöglichen sehr schnell zu prüfen, ob sie ein Element enthalten. Es ist fast O(1)
pro Test. So läuft das Ganze in linearer Zeit.
set_of_nodes = set(list_of_nodes)
edges = [(u,v) for u,v in G.edges(set_of_nodes) if u in set_of_nodes and v in set_of_nodes]
Ich mache das gleiche. Aber es ist sehr, sehr langsam, da ich Millionen Kanten habe. – sovon
verwenden Sie die 'set_of_nodes' statt' list_of_nodes'? – Joel
Ich begann, die Liste vor Ihrer Antwort zu verwenden, das war sehr langsam. Jetzt habe ich Set verwendet, es ist sehr schnell. Vielen Dank – sovon
- 1. Erhalten Sie die Scheitelpunkte aus einer Liste von Kanten
- 2. Erzeuge Kanten aus einer beliebigen Liste von Knoten
- 3. Neo4j erstellen Liste von Kanten
- 4. Netzwerk - Erstellen Sie Kanten zwischen einem Knoten und einer Liste von Knoten
- 5. Graphen (Knoten und Kanten)
- 6. eine kreisförmige Referenz in einer Liste von Knoten zu finden, und die Kanten
- 7. Android: Abgerundete Kanten wachsen innerhalb einer anderen abgerundeten Kanten
- 8. Erhalten Polygone von Voronoi Kanten
- 9. mxGraph Bild Knoten Kanten
- 10. Erhalten Sie alle Knoten innerhalb
- 11. Cypher: Rückgabe beider Knoten und Kanten aus einer Abfrage?
- 12. Liste im Wörterbuch zu einer Liste Knoten zu repräsentieren und Kanten
- 13. Konstruieren eines Binärbaums aus einer Liste seiner Kanten (Knotenpaare)
- 14. Erhalten Netzwerk Kanten von SQL-Tabellen für NetworkX in Python
- 15. Neo4j bekomme Kanten zwischen Knoten ersten Grades
- 16. Python NetworkX Hinzufügen einer Liste von Kanten mit dict
- 17. So finden Sie verbundene Kanten aus einer Liste von Kanten in Matlab
- 18. Liste der Taxonomiebegriffe aus einer Liste von Knoten ohne Duplikate
- 19. CytoscapeJS Knoten entfernen und Kanten verschieben
- 20. Zeichnen Sie ein Diagramm aus einer Liste von verbundenen Knoten
- 21. Verknüpfen von Knoten mit Kanten in R graphviz
- 22. python networkx Knoten und Kanten mit einer Bedingung entfernen
- 23. Austauschen von Knoten in einer verknüpften Liste
- 24. Erstellen einer verknüpften Liste von Knoten
- 25. Python - Build-Adjazenz-Liste aus der Liste der Knoten und Kanten
- 26. Anzahl der verbundenen Kanten zu einem Knoten und Knoten mit maximal verbundenen Kanten finden
- 27. R/Netzwerkanalyse - Wie Kanten Attribute von Knoten erstellen
- 28. Schaffung Kanten Accelerating basierend auf Paarwechselwirkung von Knoten
- 29. Vermeiden Sie Kanten-Knoten-Überlappung in cytoscape.js
- 30. Daten in einer Liste innerhalb einer Liste
bitte geben Sie mir eine Ahnung von down vote? – sovon
Leichter Hinweis: "Ich will das nicht. Wie kann ich es bekommen?" Auch das: https://stackoverflow.com/help/how-to-ask – BoboDarph
verstehe ich nicht. Ist es für weniger Bescheidenheit? Wenn das so ist, ist mein Standpunkt "Ich habe diese Zeile geschrieben, um zu spezifizieren, was ich tun möchte und was ich nicht tun will. Ich dachte, ich sollte es wirklich klären". Danke – sovon