| 12345678910111213141516171819202122232425262728293031323334353637383940 |
- """
- ======================
- 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()
|