From 6b164d263eb31813794eb05fb5757200cc0789dc Mon Sep 17 00:00:00 2001 From: Al Date: Fri, 8 Jan 2016 00:48:57 -0500 Subject: [PATCH] [math] Sparse matrix from dense --- src/sparse_matrix_utils.c | 19 +++++++++++++++++++ src/sparse_matrix_utils.h | 11 +++++++++++ 2 files changed, 30 insertions(+) create mode 100644 src/sparse_matrix_utils.c create mode 100644 src/sparse_matrix_utils.h diff --git a/src/sparse_matrix_utils.c b/src/sparse_matrix_utils.c new file mode 100644 index 00000000..44c6ed86 --- /dev/null +++ b/src/sparse_matrix_utils.c @@ -0,0 +1,19 @@ +#include "sparse_matrix_utils.h" +#include "float_utils.h" +#include "matrix.h" + + +sparse_matrix_t *sparse_matrix_new_from_matrix(matrix_t *matrix) { + sparse_matrix_t *sparse = sparse_matrix_new_shape(matrix->m, matrix->n); + + for (size_t i = 0; i < matrix->m; i++) { + for (size_t j = 0; j < matrix->n; j++) { + double value = matrix_get(matrix, i, j); + if (!double_equals(value, 0.0)) { + sparse_matrix_append(sparse, j, value); + } + } + sparse_matrix_finalize_row(sparse); + } + return sparse; +} \ No newline at end of file diff --git a/src/sparse_matrix_utils.h b/src/sparse_matrix_utils.h new file mode 100644 index 00000000..27971b12 --- /dev/null +++ b/src/sparse_matrix_utils.h @@ -0,0 +1,11 @@ +#ifndef SPARSE_MATRIX_UTILS_H +#define SPARSE_MATRIX_UTILS_H + +#include + +#include "sparse_matrix.h" +#include "matrix.h" + +sparse_matrix_t *sparse_matrix_new_from_matrix(matrix_t *matrix); + +#endif \ No newline at end of file