ตรวจสอบว่ากราฟมี Self-loop หรือไม่
อย่างที่ Eric ได้อธิบายไว้ NetworkX รองรับเอดจ์ที่เริ่มต้นและสิ้นสุดที่โหนดเดียวกัน ซึ่งอาจดูไม่สมเหตุสมผลในกราฟโซเชียลเน็ตเวิร์ก แต่มีประโยชน์มากสำหรับการจำลองข้อมูลประเภทเครือข่ายการเดินทาง ที่ผู้ใช้เริ่มต้นจากจุดหนึ่งและสิ้นสุดที่อีกจุดหนึ่ง
การตรวจสอบ self-loop ก่อนวิเคราะห์เพิ่มเติมถือเป็นแนวทางที่ดี NetworkX มีเมธอดสำหรับจุดประสงค์นี้โดยเฉพาะ: nx.number_of_selfloops(G)
ในแบบฝึกหัดนี้และแบบฝึกหัดถัดไป คำสั่ง assert จะเป็นประโยชน์มาก assert ใช้ตรวจสอบว่านิพจน์ที่ตามมาให้ค่าเป็น True หรือไม่ ถ้าไม่ใช่จะเกิด AssertionError
ก่อนเริ่ม ให้เรียกใช้ฟังก์ชัน nx.number_of_selfloops() โดยส่ง T เข้าไปใน IPython Shell เพื่อดูจำนวนเอดจ์ที่เริ่มต้นและสิ้นสุดที่โหนดเดียวกัน กราฟนี้มี self-loop หลายรายการที่เพิ่มเข้ามาแบบสังเคราะห์ หน้าที่ในแบบฝึกหัดนี้คือเขียนฟังก์ชันที่คืนค่าเอดจ์เหล่านั้น
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
การวิเคราะห์เครือข่ายเบื้องต้นด้วย Python
คำแนะนำการฝึกหัด
- กำหนดฟังก์ชันชื่อ
find_selfloop_nodes()ที่รับอาร์กิวเมนต์หนึ่งตัวคือG- ใช้
forloop วนซ้ำผ่านเอดจ์ทั้งหมดในG(โดยไม่รวม metadata) - ถ้าโหนด
uเท่ากับโหนดv:- เพิ่ม
uเข้าไปในลิสต์nodes_in_selfloops - คืนค่าลิสต์
nodes_in_selfloops
- เพิ่ม
- ใช้
- ตรวจสอบว่าจำนวน self-loop ในกราฟเท่ากับจำนวนโหนดใน self-loop ส่วนนี้เตรียมไว้ให้แล้ว กด 'ส่งคำตอบ' เพื่อดูผลลัพธ์ได้เลย!
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# 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))