Kiểm tra xem đồ thị có self-loop hay không
Như Eric đã thảo luận, NetworkX cũng cho phép các cạnh bắt đầu và kết thúc tại cùng một nút; điều này có thể không trực quan với đồ thị mạng xã hội, nhưng lại hữu ích khi mô hình hóa dữ liệu như mạng chuyến đi, nơi cá nhân xuất phát từ một vị trí và kết thúc ở vị trí khác.
Việc kiểm tra điều này trước khi phân tích sâu hơn là hữu ích, và NetworkX cung cấp một phương thức cho mục đích đó: nx.number_of_selfloops(G).
Trong bài này và các bài sau, bạn sẽ thấy câu lệnh assert rất hữu ích. Một assert sẽ kiểm tra xem biểu thức phía sau có đánh giá là True hay không; nếu không, nó sẽ ném ra một AssertionError.
Để bắt đầu, hãy gọi hàm nx.number_of_selfloops() với đối số là T trong IPython Shell để lấy số cạnh bắt đầu và kết thúc ở cùng một nút. Một số self-loop đã được thêm vào đồ thị một cách tổng hợp. Nhiệm vụ của bạn trong bài này là viết một hàm trả về các cạnh này.
Bài tập này là một phần của khóa học
Nhập môn Phân tích Mạng bằng Python
Hướng dẫn bài tập
- Định nghĩa một hàm tên
find_selfloop_nodes()nhận một đối số:G.- Dùng vòng lặp
forđể lặp qua tất cả các cạnh trongG(không bao gồm metadata). - Nếu nút
ubằng nútv:- Thêm
uvào danh sáchnodes_in_selfloops. - Trả về danh sách
nodes_in_selfloops.
- Thêm
- Dùng vòng lặp
- Kiểm tra rằng số self-loop trong đồ thị bằng với số nút nằm trong self-loop. Phần này đã được làm sẵn, nên hãy bấm "Gửi câu trả lời" để xem kết quả!
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
# 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))