Source code for greatx.utils.scipy_sparse

import numpy as np
import scipy.sparse as sp


[docs]def scipy_normalize(adj_matrix: sp.csr_matrix, add_self_loops: bool = True) -> sp.csr_matrix: """Normalize a sparse matrix according to :obj:`GCN` from the `"Semi-supervised Classification with Graph Convolutional Networks" <https://arxiv.org/abs/1609.02907>`_ paper (ICLR'17) Parameters ---------- adj_matrix : sp.csr_matrix the input sparse matrix denoting a graph. add_self_loops : bool, optional whether to add self-loops, by default True Returns ------- sp.csr_matrix the normalized adjacency matrix. """ if add_self_loops: adj_matrix = adj_matrix + sp.eye(adj_matrix.shape[0], dtype=adj_matrix.dtype, format='csr') degree = np.maximum(adj_matrix.sum(1).A1, 1) norm = sp.diags(np.power(degree, -0.5)) adj_matrix = norm @ adj_matrix @ norm return adj_matrix