|
- import numpy as np
- import scipy.sparse as sp
-
-
- def normalize_adjacency_matrix(self, adj):
- adj = sp.coo_matrix(adj)
- if adj.shape[0] == adj.shape[1]:
- adj_ = adj + sp.eye(adj.shape[0])
- rowsum = np.array(adj_.sum(1))
- degree_mat_inv_sqrt = sp.diags(np.power(rowsum, -0.5).flatten())
- adj_normalized = adj_.dot(degree_mat_inv_sqrt).transpose().dot(degree_mat_inv_sqrt).tocoo()
- else:
- rowsum = np.array(adj.sum(1))
- colsum = np.array(adj.sum(0))
- rowdegree_mat_inv = sp.diags(np.nan_to_num(np.power(rowsum, -0.5)).flatten())
- coldegree_mat_inv = sp.diags(np.nan_to_num(np.power(colsum, -0.5)).flatten())
- adj_normalized = rowdegree_mat_inv.dot(adj).dot(coldegree_mat_inv).tocoo()
- return preprocessing.sparse_to_tuple(adj_normalized)
|