Spaces:
Runtime error
Runtime error
""" | |
====================== | |
Reverse Cuthill--McKee | |
====================== | |
Cuthill-McKee ordering of matrices | |
The reverse Cuthill--McKee algorithm gives a sparse matrix ordering that | |
reduces the matrix bandwidth. | |
""" | |
import numpy as np | |
import matplotlib.pyplot as plt | |
import seaborn as sns | |
import networkx as nx | |
# build low-bandwidth matrix | |
G = nx.grid_2d_graph(3, 3) | |
rcm = list(nx.utils.reverse_cuthill_mckee_ordering(G)) | |
print("ordering", rcm) | |
print("unordered Laplacian matrix") | |
A = nx.laplacian_matrix(G) | |
x, y = np.nonzero(A) | |
# print(f"lower bandwidth: {(y - x).max()}") | |
# print(f"upper bandwidth: {(x - y).max()}") | |
print(f"bandwidth: {(y - x).max() + (x - y).max() + 1}") | |
print(A) | |
B = nx.laplacian_matrix(G, nodelist=rcm) | |
print("low-bandwidth Laplacian matrix") | |
x, y = np.nonzero(B) | |
# print(f"lower bandwidth: {(y - x).max()}") | |
# print(f"upper bandwidth: {(x - y).max()}") | |
print(f"bandwidth: {(y - x).max() + (x - y).max() + 1}") | |
print(B) | |
sns.heatmap(B.todense(), cbar=False, square=True, linewidths=0.5, annot=True) | |
plt.show() | |