47 #ifndef MUI_MATRIX_CTOR_DTOR_H_
48 #define MUI_MATRIX_CTOR_DTOR_H_
58 template<
typename ITYPE,
typename VTYPE>
60 : rows_(r), cols_(c) {
65 if (!value_vector.empty()) {
67 nnz_ = value_vector.size();
69 if (matrix_format_ == format::COO) {
71 matrix_coo.values_.reserve(value_vector.size());
72 matrix_coo.row_indices_.reserve(row_vector.size());
73 matrix_coo.col_indices_.reserve(column_vector.size());
75 matrix_coo.values_ = std::vector<VTYPE>(value_vector.begin(), value_vector.end());
76 matrix_coo.row_indices_ = std::vector<ITYPE>(row_vector.begin(), row_vector.end());
77 matrix_coo.col_indices_ = std::vector<ITYPE>(column_vector.begin(), column_vector.end());
79 }
else if (matrix_format_ == format::CSR) {
81 matrix_csr.values_.reserve(value_vector.size());
82 matrix_csr.row_ptrs_.reserve(row_vector.size());
83 matrix_csr.col_indices_.reserve(column_vector.size());
85 matrix_csr.values_ = std::vector<VTYPE>(value_vector.begin(), value_vector.end());
86 matrix_csr.row_ptrs_ = std::vector<ITYPE>(row_vector.begin(), row_vector.end());
87 matrix_csr.col_indices_ = std::vector<ITYPE>(column_vector.begin(), column_vector.end());
89 }
else if (matrix_format_ == format::CSC) {
91 matrix_csc.values_.reserve(value_vector.size());
92 matrix_csc.row_indices_.reserve(row_vector.size());
93 matrix_csc.col_ptrs_.reserve(column_vector.size());
95 matrix_csc.values_ = std::vector<VTYPE>(value_vector.begin(), value_vector.end());
96 matrix_csc.row_indices_ = std::vector<ITYPE>(row_vector.begin(), row_vector.end());
97 matrix_csc.col_ptrs_ = std::vector<ITYPE>(column_vector.begin(), column_vector.end());
100 std::cerr <<
"MUI Error [matrix_ctor_dtor.h]: Unrecognised matrix format for matrix constructor" << std::endl;
101 std::cerr <<
" Please set the matrix_format_ as:" << std::endl;
102 std::cerr <<
" format::COO: COOrdinate format" << std::endl;
103 std::cerr <<
" format::CSR (default): Compressed Sparse Row format" << std::endl;
104 std::cerr <<
" format::CSC: Compressed Sparse Column format" << std::endl;
111 if (matrix_format_ == format::CSR) {
112 matrix_csr.row_ptrs_.resize((rows_+1), 0);
113 }
else if (matrix_format_ == format::CSC) {
114 matrix_csc.col_ptrs_.resize((cols_+1), 0);
121 template<
typename ITYPE,
typename VTYPE>
123 : rows_(0), cols_(0) {
127 if (matrix_format_ == format::CSR) {
128 matrix_csr.row_ptrs_.resize((rows_+1), 0);
129 }
else if (matrix_format_ == format::CSC) {
130 matrix_csc.col_ptrs_.resize((cols_+1), 0);
136 template<
typename ITYPE,
typename VTYPE>
138 : rows_(exist_mat.rows_),
139 cols_(exist_mat.cols_),
140 nnz_(exist_mat.nnz_),
141 matrix_format_(exist_mat.matrix_format_) {
144 if (matrix_format_ == format::COO) {
145 matrix_coo.values_ = std::move(exist_mat.matrix_coo.values_);
146 matrix_coo.row_indices_ = std::move(exist_mat.matrix_coo.row_indices_);
147 matrix_coo.col_indices_ = std::move(exist_mat.matrix_coo.col_indices_);
148 }
else if (matrix_format_ == format::CSR) {
149 matrix_csr.values_ = std::move(exist_mat.matrix_csr.values_);
150 matrix_csr.row_ptrs_ = std::move(exist_mat.matrix_csr.row_ptrs_);
151 matrix_csr.col_indices_ = std::move(exist_mat.matrix_csr.col_indices_);
152 }
else if (matrix_format_ == format::CSC) {
153 matrix_csc.values_ = std::move(exist_mat.matrix_csc.values_);
154 matrix_csc.row_indices_ = std::move(exist_mat.matrix_csc.row_indices_);
155 matrix_csc.col_ptrs_ = std::move(exist_mat.matrix_csc.col_ptrs_);
157 std::cerr <<
"MUI Error [matrix_ctor_dtor.h]: Unrecognised matrix format for matrix constructor" << std::endl;
158 std::cerr <<
" Please set the matrix_format_ as:" << std::endl;
159 std::cerr <<
" format::COO: COOrdinate format" << std::endl;
160 std::cerr <<
" format::CSR (default): Compressed Sparse Row format" << std::endl;
161 std::cerr <<
" format::CSC: Compressed Sparse Column format" << std::endl;
168 template<
typename ITYPE,
typename VTYPE>
174 rows_ = denseVector.size();
175 cols_ = denseVector[0].size();
178 for (
const auto& row : denseVector) {
179 for (ITYPE i = 0; i < row.size(); ++i) {
187 matrix_coo.values_.reserve(nnz_);
188 matrix_coo.row_indices_.reserve(nnz_);
189 matrix_coo.col_indices_.reserve(nnz_);
192 for (ITYPE i = 0; i < rows_; ++i) {
193 for (ITYPE j = 0; j < cols_; ++j) {
194 const VTYPE val = denseVector[i][j];
196 matrix_coo.values_.emplace_back(val);
197 matrix_coo.row_indices_.emplace_back(i);
198 matrix_coo.col_indices_.emplace_back(j);
203 if (matrix_format_ == format::COO) {
207 }
else if (matrix_format_ == format::CSR) {
209 matrix_format_ = format::COO;
212 }
else if (matrix_format_ == format::CSC) {
214 matrix_format_ = format::COO;
220 std::cerr <<
"MUI Error [matrix_ctor_dtor.h]: Unrecognised matrix format for matrix constructor" << std::endl;
221 std::cerr <<
" Please set the matrix_format_ as:" << std::endl;
222 std::cerr <<
" format::COO: COOrdinate format" << std::endl;
223 std::cerr <<
" format::CSR (default): Compressed Sparse Row format" << std::endl;
224 std::cerr <<
" format::CSC: Compressed Sparse Column format" << std::endl;
232 template<
typename ITYPE,
typename VTYPE>
234 : rows_(n), cols_(n) {
241 if (matrix_format_ == format::CSR) {
242 matrix_csr.row_ptrs_.resize((rows_+1), 0);
243 }
else if (matrix_format_ == format::CSC) {
244 matrix_csc.col_ptrs_.resize((cols_+1), 0);
253 if (matrix_format_ == format::COO) {
255 matrix_coo.values_.reserve(n);
256 matrix_coo.row_indices_.reserve(n);
257 matrix_coo.col_indices_.reserve(n);
259 for (ITYPE i = 0; i < n; ++i) {
260 matrix_coo.values_.emplace_back(1.0);
261 matrix_coo.row_indices_.emplace_back(i);
262 matrix_coo.col_indices_.emplace_back(i);
265 }
else if (matrix_format_ == format::CSR) {
267 matrix_csr.values_.reserve(n);
268 matrix_csr.row_ptrs_.reserve(n+1);
269 matrix_csr.col_indices_.reserve(n);
271 for (ITYPE i = 0; i < n; i++) {
272 matrix_csr.values_.emplace_back(1.0);
273 matrix_csr.row_ptrs_.emplace_back(i);
274 matrix_csr.col_indices_.emplace_back(i);
277 matrix_csr.row_ptrs_.emplace_back(n);
279 }
else if (matrix_format_ == format::CSC) {
281 matrix_csc.values_.reserve(n);
282 matrix_csc.row_indices_.reserve(n);
283 matrix_csc.col_ptrs_.reserve(n+1);
285 for (ITYPE i = 0; i < n; ++i) {
286 matrix_csc.values_.emplace_back(1.0);
287 matrix_csc.row_indices_.emplace_back(i);
288 matrix_csc.col_ptrs_.emplace_back(i);
291 matrix_csc.col_ptrs_.emplace_back(n);
294 std::cerr <<
"MUI Error [matrix_ctor_dtor.h]: Unrecognised matrix format for matrix constructor" << std::endl;
295 std::cerr <<
" Please set the matrix_format_ as:" << std::endl;
296 std::cerr <<
" format::COO: COOrdinate format" << std::endl;
297 std::cerr <<
" format::CSR (default): Compressed Sparse Row format" << std::endl;
298 std::cerr <<
" format::CSC: Compressed Sparse Column format" << std::endl;
303 std::cerr <<
"MUI Error [matrix_ctor_dtor.h]: unidentified token string for square matrix constructor" << std::endl;
304 std::cerr <<
" Please set the token string as:" << std::endl;
305 std::cerr <<
" empty string (default): Empty (all-zero) square matrix" << std::endl;
306 std::cerr <<
" 'identity': identity square matrix" << std::endl;
312 template<
typename ITYPE,
typename VTYPE>
316 matrix_coo.values_.clear();
317 matrix_coo.row_indices_.clear();
318 matrix_coo.col_indices_.clear();
320 matrix_csr.values_.clear();
321 matrix_csr.row_ptrs_.clear();
322 matrix_csr.col_indices_.clear();
324 matrix_csc.values_.clear();
325 matrix_csc.row_indices_.clear();
326 matrix_csc.col_ptrs_.clear();
332 matrix_format_ = format::CSR;
333 matrix_csr.row_ptrs_.
resize(1, 0);
342 template<
typename ITYPE,
typename VTYPE>
347 if (matrix_format ==
"COO") {
348 matrix_format_ = format::COO;
349 }
else if (matrix_format ==
"CSR") {
350 matrix_format_ = format::CSR;
351 }
else if (matrix_format ==
"CSC") {
352 matrix_format_ = format::CSC;
354 std::cerr <<
"MUI Error [matrix_ctor_dtor.h]: Unrecognised format type: " << format <<
" for matrix constructor" << std::endl;
355 std::cerr <<
" Please set the format string as:" << std::endl;
356 std::cerr <<
" 'COO': COOrdinate format" << std::endl;
357 std::cerr <<
" 'CSR' (default): Compressed Sparse Row format" << std::endl;
358 std::cerr <<
" 'CSC': Compressed Sparse Column format" << std::endl;
sparse_matrix(ITYPE, ITYPE, const std::string &="CSR", const std::vector< VTYPE > &={}, const std::vector< ITYPE > &={}, const std::vector< ITYPE > &={})
Definition: matrix_ctor_dtor.h:59
void set_matrix_format(const std::string &="CSR")
Definition: matrix_ctor_dtor.h:343
void coo_to_csc()
Definition: matrix_manipulation.h:1772
void assert_valid_vector_size(const std::string &={}, const std::string &={}) const
Definition: matrix_asserts.h:61
void resize(ITYPE, ITYPE)
Definition: matrix_manipulation.h:62
void coo_to_csr()
Definition: matrix_manipulation.h:1720
void sort_coo(bool=true, bool=false, const std::string &="overwrite")
Definition: matrix_manipulation.h:808
u u u u u u min
Definition: dim.h:289
std::string string_to_lower(const std::string &s)
Definition: linalg_util.h:78
std::string trim(const std::string &s)
Definition: linalg_util.h:73
std::string string_to_upper(const std::string &s)
Definition: linalg_util.h:85