16 KiB
16 KiB
In [ ]:
import networkx as nx
import numpy as np
import matplotlib.pyplot as pltIn [ ]:
G = nx.Graph()
G.add_edges_from([
("Alice","Bob"),
("Bob","Claire"),
("Alice","David"),
("Bob","Emma")
])
# Obtenir la matrice d'adjacence
A = nx.to_numpy_array(G, nodelist=G.nodes())
print(list(G.nodes()))
print(A.astype(int))In [ ]:
plt.figure()
nx.draw(G, with_labels=True, node_color="lightblue", node_size=1000)
plt.show()In [ ]:
# Degré de chaque sommet
print("Degré de chaque individu :", dict(G.degree()))
# Densité du réseau (rapport entre liens existants et liens possibles)
print("Densité du réseau :", round(nx.density(G), 2))In [ ]:
A2 = np.linalg.matrix_power(A, 2)
print("A² =\n", A2.astype(int))In [ ]:
# NetworkX construit directement la liste d'adjacence à partir du graphe G
liste_adjacence = nx.to_dict_of_lists(G)
for personne, amis in liste_adjacence.items():
print(f"{personne} → {amis}")In [ ]:
# Construction manuelle de la matrice d'incidence avec numpy
# (une colonne par arête, deux 1 par colonne : les deux extrémités)
liste_aretes = list(G.edges())
sommets = list(G.nodes())
B = np.zeros((len(sommets), len(liste_aretes)), dtype=int)
for colonne, (u, v) in enumerate(liste_aretes):
B[sommets.index(u), colonne] = 1
B[sommets.index(v), colonne] = 1
print("Arêtes (colonnes) :", liste_aretes)
print(sommets)
print(B)In [ ]:
# La liste d'incidence : pour chaque arête, ses deux extrémités
for i, (u, v) in enumerate(G.edges()):
print(f"Arête {i} : {u} — {v}")