Skip to content

Check for symmetry in _graph_from_weighted_sparse_matrix #782

Open
@psl-schaefer

Description

@psl-schaefer

If one creates a weighted, undirected graph from an adjacency matrix, wouldn't it make sense to check if the adjacency matrix is symmetric? This check was also introduced in rigraph I think, see igraph/rigraph#182.

I am referring to this function:

def _graph_from_weighted_sparse_matrix(

A simple check could be something like symmetric = not np.any((matrix!=matrix.T).data) (here assuming that it is scipy.sparse.csr_matrix).

Here is a simple example (not the most efficient way to check the behavior though):

import numpy as np
from scipy.sparse import csr_matrix
import igraph as ig
rng = np.random.default_rng(0)
n = int(1e3)
sparse_adj = rng.choice(np.array([0, 1, 2]),
                        size=(n**2), replace=True, 
                        p=np.array([0.9, 0.05, 0.05])).reshape(n, n).astype(np.float64)
sparse_adj = csr_matrix(sparse_adj)
symmetric = not np.any((sparse_adj!=sparse_adj.T).data)
print(f"{symmetric=}")
g = ig.Graph.Weighted_Adjacency(sparse_adj, 
                                mode="undirected",
                                attr="weight")

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions