Prüfen, ob es Selbstschleifen im Graphen gibt
Wie Eric erklärt hat, erlaubt NetworkX auch Kanten, die am selben Knoten beginnen und enden; das wäre für einen sozialen Netzwerkgraphen nicht intuitiv, ist aber nützlich, um Daten wie Reise- oder Wege-Netzwerke zu modellieren, bei denen Personen an einem Ort starten und an einem anderen enden.
Es ist sinnvoll, vor weiteren Analysen darauf zu prüfen, und NetworkX stellt dafür eine Methode bereit: nx.number_of_selfloops(G).
In dieser und späteren Übungen ist der assert-Befehl hilfreich. Ein assert prüft, ob der nachfolgende Ausdruck True ergibt; andernfalls wird ein AssertionError ausgelöst.
Rufe zunächst die Funktion nx.number_of_selfloops() mit T in der IPython-Shell auf, um die Anzahl der Kanten zu erhalten, die am selben Knoten beginnen und enden. Dem Graphen wurden synthetisch mehrere Selbstschleifen hinzugefügt. Deine Aufgabe in dieser Übung ist es, eine Funktion zu schreiben, die diese Kanten zurückgibt.
Diese Übung ist Teil des Kurses
Einstieg in die Netzwerkanalyse mit Python
Anleitung zur Übung
- Definiere eine Funktion namens
find_selfloop_nodes(), die ein Argument entgegennimmt:G.- Iteriere mit einer
for-Schleife über alle Kanten inG(ohne Metadaten). - Wenn Knoten
ugleich Knotenvist:- Hänge
uan die Listenodes_in_selfloopsan. - Gib die Liste
nodes_in_selfloopszurück.
- Hänge
- Iteriere mit einer
- Prüfe, dass die Anzahl der Selbstschleifen im Graphen der Anzahl der Knoten in Selbstschleifen entspricht. Das wurde für dich vorbereitet – klicke auf "Antwort senden", um das Ergebnis zu sehen!
Interaktive Übung
Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.
# Define find_selfloop_nodes()
def ____:
"""
Finds all nodes that have self-loops in the graph G.
"""
nodes_in_selfloops = []
# Iterate over all the edges of G
for u, v in ____:
# Check if node u and node v are the same
if ____:
# Append node u to nodes_in_selfloops
____
return nodes_in_selfloops
# Check whether number of self loops equals the number of nodes in self loops
assert nx.number_of_selfloops(T) == len(find_selfloop_nodes(T))