1#ifndef MATRIX_UTILITIES_H
2#define MATRIX_UTILITIES_H
8#include <initializer_list>
16template<
typename MatType>
20 for(
uint_t col=0; col<mat.columns(); ++col){
22 auto tmp = mat(r1, col);
23 mat(r1, col) = mat(r2, col);
32template<
typename MatType>
40 std::random_device rd;
41 std::mt19937 gen(rd());
42 std::uniform_int_distribution<uint_t> random(min, max);
44 std::set<uint_t> touched;
46 for(
uint_t r=0; r<max; ++r){
49 if(touched.find(r) != touched.end()){
53 uint_t candidate = random(gen);
55 if(touched.find(candidate) != touched.end()){
61 touched.insert(candidate);
131 return matrix.row(row_idx);
138 auto row =
get_row(matrix, row_idx);
139 return row.maxCoeff();
146 auto row =
get_row(matrix, row_idx);
147 return row.maxCoeff();
198void center_columns(DynMat<T>& matrix, const DynVec<T>& vals){
200 for(uint_t r=0; r<matrix.rows(); ++r){
201 for (uint_t c=0; c<matrix.columns(); ++c){
202 matrix(r, c ) -= vals[c];
212DynMat<T> create_identity_matrix(uint_t nrows){
214 DynMat<T> mat(nrows, nrows);
216 for(uint_t r=0; r<nrows; ++r){
217 for(uint_t c=0; c<nrows; ++c){
219 mat(r, r) = static_cast<T>(1);
222 mat(r, c) = static_cast<T>(0);
235DynMat<T> create_diagonal_matrix(const std::vector<T>& diagonal){
237 DynMat<T> mat(diagonal.size(), diagonal.size());
239 for(uint_t r=0; r<diagonal.size(); ++r){
240 for(uint_t c=0; c<diagonal.size(); ++c){
242 mat(r, r) = diagonal[r];
245 mat(r, c) = static_cast<T>(0);
259DynMat<T> create_diagonal_matrix(const std::initializer_list<T>& diagonal){
261 std::vector<T> diag(diagonal.begin(), diagonal.end());
262 return create_diagonal_matrix(diag);
Eigen::RowVectorX< T > DynVec
Dynamically sized row vector.
Definition bitrl_types.h:74
std::size_t uint_t
uint_t
Definition bitrl_types.h:43
Eigen::MatrixX< T > DynMat
Dynamically sized matrix to use around the library.
Definition bitrl_types.h:49
T get_row_min(const DynMat< T > &matrix, uint_t row_idx)
Definition matrix_utilities.h:144
std::set< uint_t > shuffle_matrix_rows(MatType &mat)
Shuffle the rows of the matrix. Returns a set with the rows that have been shuffled.
Definition matrix_utilities.h:34
void exchange_rows(MatType &mat, uint_t r1, uint_t r2)
Exchange the rows of the matrix.
Definition matrix_utilities.h:18
T get_row_max(const DynMat< T > &matrix, uint_t row_idx)
Definition matrix_utilities.h:136
DynVec< T > get_row(const DynMat< T > &matrix, uint_t row_idx)
Extract the cidx-th column from the matrix.
Definition matrix_utilities.h:130
Various utilities used when working with RL problems.
Definition cuberl_types.h:16