Function to check if sparse matrix is symmetric

I developed a function (shown below) to check if a sparse matrix is symmetric and would like to know if the community is interested to include in scipy.sparse. Regards, Saullo def is_symmetric(m): """Check if a sparse matrix is symmetric Parameters ---------- m : array or sparse matrix A square matrix. Returns ------- check : bool The check result. """ if m.shape[0] != m.shape[1]: raise ValueError('m must be a square matrix') if not isinstance(m, coo_matrix): m = coo_matrix(m) r, c, v = m.row, m.col, m.data tril_no_diag = r > c triu_no_diag = c > r if triu_no_diag.sum() != tril_no_diag.sum(): return False rl = r[tril_no_diag] cl = c[tril_no_diag] vl = v[tril_no_diag] ru = r[triu_no_diag] cu = c[triu_no_diag] vu = v[triu_no_diag] sortl = np.lexsort((cl, rl)) sortu = np.lexsort((ru, cu)) vl = vl[sortl] vu = vu[sortu] check = np.allclose(vl, vu) return check

IMHO "is_Hermitian" is more general. Nils On Fri, Oct 10, 2014 at 12:00 PM, Saullo Castro <saullogiovani@gmail.com> wrote:
I developed a function (shown below) to check if a sparse matrix is symmetric and would like to know if the community is interested to include in scipy.sparse.
Regards, Saullo
def is_symmetric(m): """Check if a sparse matrix is symmetric
Parameters ---------- m : array or sparse matrix A square matrix.
Returns ------- check : bool The check result.
""" if m.shape[0] != m.shape[1]: raise ValueError('m must be a square matrix')
if not isinstance(m, coo_matrix): m = coo_matrix(m)
r, c, v = m.row, m.col, m.data tril_no_diag = r > c triu_no_diag = c > r
if triu_no_diag.sum() != tril_no_diag.sum(): return False
rl = r[tril_no_diag] cl = c[tril_no_diag] vl = v[tril_no_diag] ru = r[triu_no_diag] cu = c[triu_no_diag] vu = v[triu_no_diag]
sortl = np.lexsort((cl, rl)) sortu = np.lexsort((ru, cu)) vl = vl[sortl] vu = vu[sortu]
check = np.allclose(vl, vu)
return check
_______________________________________________ SciPy-Dev mailing list SciPy-Dev@scipy.org http://mail.scipy.org/mailman/listinfo/scipy-dev
participants (2)
-
Nils Wagner
-
Saullo Castro