Source code for openmdao.matrices.csr_matrix
"""Define the CSRmatrix class."""
from scipy.sparse import csr_matrix
from openmdao.matrices.coo_matrix import COOMatrix
[docs]class CSRMatrix(COOMatrix):
"""
Sparse matrix in Compressed Row Storage format.
Parameters
----------
submats : dict
Dictionary of sub-jacobian data keyed by (row_name, col_name).
"""
def _pre_update(self, dtype):
"""
Do anything that needs to be done at the end of SplitJacobian._update.
Parameters
----------
dtype : dtype
The dtype of the jacobian.
"""
super()._pre_update(dtype)
self._matrix = self._coo
def _post_update(self):
"""
Do anything that needs to be done at the end of SplitJacobian._update.
"""
# this will add any repeated entries together
coo = self._coo
# this will add any repeated entries together
# NOTE: The CSR matrix was created in the following way instead of using self._coo.tocsr()
# because on older versions of scipy, self._coo.tocsr() reuses the row/col arrays and the
# result is that self._coo.row and self._coo.col get scrambled after csr conversion.
self._matrix = csr_matrix((coo.data, (coo.row, coo.col)), shape=coo.shape)
self._matrix_T = None # reset the transpose
[docs] def transpose(self):
"""
Transpose the matrix.
Returns
-------
csc_matrix
Transposed matrix.
"""
if self._matrix_T is None:
coo_T = self._coo.T
self._matrix_T = csr_matrix((coo_T.data, (coo_T.row, coo_T.col)), shape=coo_T.shape)
return self._matrix_T