import stormpy.utility from . import storage from .storage import * def build_sparse_matrix(array, row_group_indices=[]): """ Build a sparse matrix from numpy array. :param numpy array: The array. :param List[double] row_group_indices: List containing the starting row of each row group in ascending order. :return: Sparse matrix. """ num_row = array.shape[0] num_col = array.shape[1] len_group_indices = len(row_group_indices) if len_group_indices > 0: builder = storage.SparseMatrixBuilder(rows=num_row, columns=num_col, has_custom_row_grouping=True, row_groups=len_group_indices) else: builder = storage.SparseMatrixBuilder(rows=num_row, columns=num_col) row_group_index = 0 for r in range(num_row): # check whether to start a custom row group if row_group_index < len_group_indices and r == row_group_indices[row_group_index]: builder.new_row_group(r) row_group_index += 1 # insert values of the current row for c in range(num_col): builder.add_next_value(r, c, array[r, c]) return builder.build() def build_parametric_sparse_matrix(array, row_group_indices=[]): """ Build a sparse matrix from numpy array. :param numpy array: The array. :param List[double] row_group_indices: List containing the starting row of each row group in ascending order. :return: Parametric sparse matrix. """ num_row = array.shape[0] num_col = array.shape[1] len_group_indices = len(row_group_indices) if len_group_indices > 0: builder = storage.ParametricSparseMatrixBuilder(rows=num_row, columns=num_col, has_custom_row_grouping=True, row_groups=len_group_indices) else: builder = storage.ParametricSparseMatrixBuilder(rows=num_row, columns=num_col) row_group_index = 0 for r in range(num_row): # check whether to start a custom row group if row_group_index < len_group_indices and r == row_group_indices[row_group_index]: builder.new_row_group(r) row_group_index += 1 # insert values of the current row for c in range(num_col): builder.add_next_value(r, c, array[r, c]) return builder.build()