You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
2.3 KiB
67 lines
2.3 KiB
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()
|
|
|