Source code for sknetwork.utils.co_neighbor

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on October 2019
@author: Nathan de Lara <ndelara@enst.fr>
"""
from typing import Union

import numpy as np
from scipy import sparse

from sknetwork.embedding.svd import SVD, GSVD
from sknetwork.linalg.normalization import normalize
from sknetwork.utils.check import check_format
from sknetwork.utils.knn import KNNDense

[docs]def co_neighbor_graph(adjacency: Union[sparse.csr_matrix, np.ndarray], normalized: bool = True, method='knn',
n_neighbors: int = 5, n_components: int = 8) -> sparse.csr_matrix:
"""Compute the co-neighborhood adjacency.

* Graphs
* Digraphs
* Bigraphs

:math:\\tilde{A} = AF^{-1}A^T,

where F is a weight matrix.

Parameters
----------
Adjacency of the input graph.
normalized:
If True, F is the diagonal in-degree matrix :math:F = \\text{diag}(A^T1).
Otherwise, F is the identity matrix.
method:
Either 'exact' or 'knn'. If 'exact' the output is computed with matrix multiplication.
However, the density can be much higher than in the input graph and this can trigger Memory errors.
If 'knn', the co-neighborhood is approximated through KNNDense-search in an appropriate spectral embedding
space.
n_neighbors:
Number of neighbors for the KNNDense search. Only useful if method='knn'.
n_components:
Dimension of the embedding space. Only useful if method='knn'.

Returns
-------
Adjacency of the co-neighborhood.
"""
method = method.lower()
if method == 'exact':
if normalized:
else: