| """Functions to extract parts of sparse matrices |
| """ |
|
|
| __docformat__ = "restructuredtext en" |
|
|
| __all__ = ['find', 'tril', 'triu'] |
|
|
|
|
| from ._coo import coo_matrix, coo_array |
| from ._base import sparray |
|
|
|
|
| def find(A): |
| """Return the indices and values of the nonzero elements of a matrix |
| |
| Parameters |
| ---------- |
| A : dense or sparse array or matrix |
| Matrix whose nonzero elements are desired. |
| |
| Returns |
| ------- |
| (I,J,V) : tuple of arrays |
| I,J, and V contain the row indices, column indices, and values |
| of the nonzero entries. |
| |
| |
| Examples |
| -------- |
| >>> from scipy.sparse import csr_array, find |
| >>> A = csr_array([[7.0, 8.0, 0],[0, 0, 9.0]]) |
| >>> find(A) |
| (array([0, 0, 1], dtype=int32), |
| array([0, 1, 2], dtype=int32), |
| array([ 7., 8., 9.])) |
| |
| """ |
|
|
| A = coo_array(A, copy=True) |
| A.sum_duplicates() |
| |
| nz_mask = A.data != 0 |
| return A.row[nz_mask], A.col[nz_mask], A.data[nz_mask] |
|
|
|
|
| def tril(A, k=0, format=None): |
| """Return the lower triangular portion of a sparse array or matrix |
| |
| Returns the elements on or below the k-th diagonal of A. |
| - k = 0 corresponds to the main diagonal |
| - k > 0 is above the main diagonal |
| - k < 0 is below the main diagonal |
| |
| Parameters |
| ---------- |
| A : dense or sparse array or matrix |
| Matrix whose lower trianglar portion is desired. |
| k : integer : optional |
| The top-most diagonal of the lower triangle. |
| format : string |
| Sparse format of the result, e.g. format="csr", etc. |
| |
| Returns |
| ------- |
| L : sparse matrix |
| Lower triangular portion of A in sparse format. |
| |
| See Also |
| -------- |
| triu : upper triangle in sparse format |
| |
| Examples |
| -------- |
| >>> from scipy.sparse import csr_array, tril |
| >>> A = csr_array([[1, 2, 0, 0, 3], [4, 5, 0, 6, 7], [0, 0, 8, 9, 0]], |
| ... dtype='int32') |
| >>> A.toarray() |
| array([[1, 2, 0, 0, 3], |
| [4, 5, 0, 6, 7], |
| [0, 0, 8, 9, 0]], dtype=int32) |
| >>> tril(A).toarray() |
| array([[1, 0, 0, 0, 0], |
| [4, 5, 0, 0, 0], |
| [0, 0, 8, 0, 0]], dtype=int32) |
| >>> tril(A).nnz |
| 4 |
| >>> tril(A, k=1).toarray() |
| array([[1, 2, 0, 0, 0], |
| [4, 5, 0, 0, 0], |
| [0, 0, 8, 9, 0]], dtype=int32) |
| >>> tril(A, k=-1).toarray() |
| array([[0, 0, 0, 0, 0], |
| [4, 0, 0, 0, 0], |
| [0, 0, 0, 0, 0]], dtype=int32) |
| >>> tril(A, format='csc') |
| <Compressed Sparse Column sparse array of dtype 'int32' |
| with 4 stored elements and shape (3, 5)> |
| |
| """ |
| coo_sparse = coo_array if isinstance(A, sparray) else coo_matrix |
|
|
| |
| A = coo_sparse(A, copy=False) |
| mask = A.row + k >= A.col |
|
|
| row = A.row[mask] |
| col = A.col[mask] |
| data = A.data[mask] |
| new_coo = coo_sparse((data, (row, col)), shape=A.shape, dtype=A.dtype) |
| return new_coo.asformat(format) |
|
|
|
|
| def triu(A, k=0, format=None): |
| """Return the upper triangular portion of a sparse array or matrix |
| |
| Returns the elements on or above the k-th diagonal of A. |
| - k = 0 corresponds to the main diagonal |
| - k > 0 is above the main diagonal |
| - k < 0 is below the main diagonal |
| |
| Parameters |
| ---------- |
| A : dense or sparse array or matrix |
| Matrix whose upper trianglar portion is desired. |
| k : integer : optional |
| The bottom-most diagonal of the upper triangle. |
| format : string |
| Sparse format of the result, e.g. format="csr", etc. |
| |
| Returns |
| ------- |
| L : sparse array or matrix |
| Upper triangular portion of A in sparse format. |
| Sparse array if A is a sparse array, otherwise matrix. |
| |
| See Also |
| -------- |
| tril : lower triangle in sparse format |
| |
| Examples |
| -------- |
| >>> from scipy.sparse import csr_array, triu |
| >>> A = csr_array([[1, 2, 0, 0, 3], [4, 5, 0, 6, 7], [0, 0, 8, 9, 0]], |
| ... dtype='int32') |
| >>> A.toarray() |
| array([[1, 2, 0, 0, 3], |
| [4, 5, 0, 6, 7], |
| [0, 0, 8, 9, 0]], dtype=int32) |
| >>> triu(A).toarray() |
| array([[1, 2, 0, 0, 3], |
| [0, 5, 0, 6, 7], |
| [0, 0, 8, 9, 0]], dtype=int32) |
| >>> triu(A).nnz |
| 8 |
| >>> triu(A, k=1).toarray() |
| array([[0, 2, 0, 0, 3], |
| [0, 0, 0, 6, 7], |
| [0, 0, 0, 9, 0]], dtype=int32) |
| >>> triu(A, k=-1).toarray() |
| array([[1, 2, 0, 0, 3], |
| [4, 5, 0, 6, 7], |
| [0, 0, 8, 9, 0]], dtype=int32) |
| >>> triu(A, format='csc') |
| <Compressed Sparse Column sparse array of dtype 'int32' |
| with 8 stored elements and shape (3, 5)> |
| |
| """ |
| coo_sparse = coo_array if isinstance(A, sparray) else coo_matrix |
|
|
| |
| A = coo_sparse(A, copy=False) |
| mask = A.row + k <= A.col |
|
|
| row = A.row[mask] |
| col = A.col[mask] |
| data = A.data[mask] |
| new_coo = coo_sparse((data, (row, col)), shape=A.shape, dtype=A.dtype) |
| return new_coo.asformat(format) |
|
|