diff options
author | Marc Glisse <marc.glisse@inria.fr> | 2020-06-17 19:22:20 +0200 |
---|---|---|
committer | Marc Glisse <marc.glisse@inria.fr> | 2020-06-17 19:22:20 +0200 |
commit | 2977b097971c4bf314cf0595171c86bce81476b8 (patch) | |
tree | 99495a2b994ba9997785b9ed8714ccb87ed35e9c /src/Collapse/include/gudhi | |
parent | 5e6b64501b27aec000ecd1c495e35aaa6eb92cda (diff) |
Expand the matrix dynamically when inserting new vertices
Diffstat (limited to 'src/Collapse/include/gudhi')
-rw-r--r-- | src/Collapse/include/gudhi/Flag_complex_sparse_matrix.h | 20 |
1 files changed, 4 insertions, 16 deletions
diff --git a/src/Collapse/include/gudhi/Flag_complex_sparse_matrix.h b/src/Collapse/include/gudhi/Flag_complex_sparse_matrix.h index 2b939285..c281b2ed 100644 --- a/src/Collapse/include/gudhi/Flag_complex_sparse_matrix.h +++ b/src/Collapse/include/gudhi/Flag_complex_sparse_matrix.h @@ -250,6 +250,8 @@ class Flag_complex_sparse_matrix { auto result = vertex_to_row_.emplace(vertex, n); // If it was not already inserted - Value won't be updated by emplace if it is already present if (result.second) { + // Expand the matrix. The size of rows is irrelevant. + sparse_row_adjacency_matrix_.emplace_back((std::numeric_limits<Eigen::Index>::max)()); // Initializing the diagonal element of the adjency matrix corresponding to rw_b. sparse_row_adjacency_matrix_[n].insert(n) = -1; // not an edge // Must be done after reading its size() @@ -291,19 +293,7 @@ class Flag_complex_sparse_matrix { */ template<typename Filtered_edge_range> Flag_complex_sparse_matrix(const Filtered_edge_range& filtered_edge_range) - : f_edge_vector_(filtered_edge_range.begin(), filtered_edge_range.end()) { - // To get the number of vertices - std::unordered_set<Vertex_handle> vertices; - for (Filtered_edge filtered_edge : filtered_edge_range) { - Vertex_handle u; - Vertex_handle v; - std::tie(u,v) = std::get<0>(filtered_edge); - vertices.emplace(u); - vertices.emplace(v); - } - // Initializing sparse_row_adjacency_matrix_, This is a row-major sparse matrix. - sparse_row_adjacency_matrix_.resize(vertices.size(), Sparse_vector(vertices.size())); - } + : f_edge_vector_(filtered_edge_range.begin(), filtered_edge_range.end()) { } /** \brief Flag_complex_sparse_matrix constructor from a proximity graph, cf. `Gudhi::compute_proximity_graph`. * @@ -312,9 +302,7 @@ class Flag_complex_sparse_matrix { * * The constructor is computing and filling a vector of `Flag_complex_sparse_matrix::Filtered_edge` */ - Flag_complex_sparse_matrix(const Proximity_graph& one_skeleton_graph) - : sparse_row_adjacency_matrix_(boost::num_vertices(one_skeleton_graph), - Sparse_vector(boost::num_vertices(one_skeleton_graph))) { + Flag_complex_sparse_matrix(const Proximity_graph& one_skeleton_graph) { // Insert all edges for (auto edge_it = boost::edges(one_skeleton_graph); edge_it.first != edge_it.second; ++edge_it.first) { |