simutil.py 文件源码

python
阅读 33 收藏 0 点赞 0 评论 0

项目:hylaa 作者: stanleybak 项目源码 文件源码
def __init__(self, a_mat, b_vec, settings):
        '''x' = Ax + b  (b_vector here is the constant part of the dynamics, NOT the B input-effect matrix in 'BU') '''

        if isinstance(a_mat, list):
            a_mat = np.array(a_mat, dtype=float)

        if isinstance(b_vec, list):
            b_vec = np.array(b_vec, dtype=float)

        assert isinstance(a_mat, np.ndarray)
        assert isinstance(b_vec, np.ndarray)

        assert isinstance(settings, SimulationSettings)
        assert settings.step > 0

        self.settings = settings
        self.num_dims = b_vec.shape[0]
        assert self.num_dims > 0
        assert a_mat.shape[0] == a_mat.shape[1], "expected A matrix to be a square"
        assert len(b_vec.shape) == 1, "expected passed-in b_vector to be a single row: {}".format(b_vec)
        assert a_mat.shape[0] == b_vec.shape[0], "A matrix and b vector sizes should match"

        self.dy_data = DyData(csr_matrix(a_mat), csr_matrix(b_vec), settings.sparse)

        # initialize simulation result variables
        self.origin_sim = None
        self.vec_values = None
        self.step_offset = None

        # itemsize is bytes per float
        if self.settings.sim_mode == SimulationSettings.SIMULATION:
            mb_per_step = np.dtype(float).itemsize * self.num_dims * self.num_dims / 1024.0 / 1024.0
            self.max_steps_in_mem = max(1, int(settings.sim_in_memory_mb / mb_per_step) - 1)
        elif self.settings.sim_mode == SimulationSettings.MATRIX_EXP:
            self.max_steps_in_mem = 1

            if self.num_dims < 150:
                # dense expm is fast if dims < 150
                self.matrix_exp = dense_expm(a_mat * settings.step).transpose().copy()
            else:
                # sparse expm
                self.matrix_exp = sparse_expm(csc_matrix(a_mat * settings.step)).transpose().toarray()

        self.freeze_attrs()
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号