From 04f4501b35eaa2bd33393ef2445d038251ba1355 Mon Sep 17 00:00:00 2001 From: skachano Date: Wed, 14 Dec 2016 18:08:09 +0000 Subject: Added an example with a distance matrix for the farthest point algorithm git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/subsampling_and_spatialsearching@1874 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 340e465189dc7ec8f8706e60e2d8097b53bfd5a0 --- src/Subsampling/example/CMakeLists.txt | 1 + src/Subsampling/example/example_custom_kernel.cpp | 69 +++++++++++++++++++++++ 2 files changed, 70 insertions(+) create mode 100644 src/Subsampling/example/example_custom_kernel.cpp (limited to 'src/Subsampling/example') diff --git a/src/Subsampling/example/CMakeLists.txt b/src/Subsampling/example/CMakeLists.txt index 54349f0c..0fd3335c 100644 --- a/src/Subsampling/example/CMakeLists.txt +++ b/src/Subsampling/example/CMakeLists.txt @@ -6,6 +6,7 @@ if(CGAL_FOUND) if (EIGEN3_FOUND) add_executable(Subsampling_example_pick_n_random_points example_pick_n_random_points.cpp) add_executable(Subsampling_example_choose_n_farthest_points example_choose_n_farthest_points.cpp) + add_executable(Subsampling_example_custom_kernel example_custom_kernel.cpp) add_executable(Subsampling_example_sparsify_point_set example_sparsify_point_set.cpp) target_link_libraries(Subsampling_example_sparsify_point_set ${CGAL_LIBRARY}) diff --git a/src/Subsampling/example/example_custom_kernel.cpp b/src/Subsampling/example/example_custom_kernel.cpp new file mode 100644 index 00000000..05797ebe --- /dev/null +++ b/src/Subsampling/example/example_custom_kernel.cpp @@ -0,0 +1,69 @@ +#include + +#include +#include + +#include +#include + + +/* The class Kernel contains a distance function defined on the set of points {0,1,2,3} + * and computes a distance according to the matrix: + * 0 1 2 4 + * 1 0 4 2 + * 2 4 0 1 + * 4 2 1 0 + */ +class Kernel { +public: + typedef double FT; + typedef unsigned Point_d; + + // Class Squared_distance_d + class Squared_distance_d { + private: + std::vector> matrix_; + + public: + + Squared_distance_d() + { + matrix_.push_back(std::vector({0,1,2,4})); + matrix_.push_back(std::vector({1,0,4,2})); + matrix_.push_back(std::vector({2,4,0,1})); + matrix_.push_back(std::vector({4,2,1,0})); + } + + FT operator()(Point_d p1, Point_d p2) + { + return matrix_[p1][p2]; + } + }; + + // Constructor + Kernel() + {} + + // Object of type Squared_distance_d + Squared_distance_d squared_distance_d_object() const + { + return Squared_distance_d(); + } + +}; + +int main(void) { + typedef Kernel K; + typedef typename K::Point_d Point_d; + + K k; + std::vector points = {0,1,2,3}; + std::vector results; + + Gudhi::subsampling::choose_n_farthest_points(k, points, 2, std::back_inserter(results)); + std::cout << "Before sparsification: " << points.size() << " points.\n"; + std::cout << "After sparsification: " << results.size() << " points.\n"; + std::cout << "Result table: {" << results[0] << "," << results[1] << "}\n"; + + return 0; +} -- cgit v1.2.3 From c8dbfc68cca3c5462226e5d953f721143fc645f0 Mon Sep 17 00:00:00 2001 From: vrouvrea Date: Fri, 16 Dec 2016 14:07:02 +0000 Subject: Fix cpplint and warnings git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/trunk@1902 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 24c5aacf579eb1ceb35c680770d5168524c4c84b --- .../include/gudhi/Persistent_cohomology.h | 3 +- .../test/betti_numbers_unit_test.cpp | 8 ++--- src/Subsampling/example/example_custom_kernel.cpp | 38 +++++++++------------- src/Subsampling/include/gudhi/sparsify_point_set.h | 2 -- src/common/include/gudhi/random_point_generators.h | 2 -- 5 files changed, 22 insertions(+), 31 deletions(-) (limited to 'src/Subsampling/example') diff --git a/src/Persistent_cohomology/include/gudhi/Persistent_cohomology.h b/src/Persistent_cohomology/include/gudhi/Persistent_cohomology.h index c3a1535a..681de8c6 100644 --- a/src/Persistent_cohomology/include/gudhi/Persistent_cohomology.h +++ b/src/Persistent_cohomology/include/gudhi/Persistent_cohomology.h @@ -699,12 +699,13 @@ class Persistent_cohomology { std::vector< std::pair< Filtration_value , Filtration_value > > result; // auto && pair, to avoid unnecessary copying for (auto && pair : persistent_pairs_) { - if (cpx_->dimension( get<0>(pair)) == dimension ) { + if (cpx_->dimension(get<0>(pair)) == dimension) { result.emplace_back(cpx_->filtration(get<0>(pair)), cpx_->filtration(get<1>(pair))); } } return result; } + private: /* * Structure representing a cocycle. diff --git a/src/Persistent_cohomology/test/betti_numbers_unit_test.cpp b/src/Persistent_cohomology/test/betti_numbers_unit_test.cpp index b98a3765..0ed3fddf 100644 --- a/src/Persistent_cohomology/test/betti_numbers_unit_test.cpp +++ b/src/Persistent_cohomology/test/betti_numbers_unit_test.cpp @@ -124,7 +124,7 @@ BOOST_AUTO_TEST_CASE( plain_homology_betti_numbers ) auto intervals_in_dimension_0 = pcoh.intervals_in_dimension(0); std::cout << "intervals_in_dimension_0.size() = " << intervals_in_dimension_0.size() << std::endl; - for (int i = 0; i < intervals_in_dimension_0.size(); i++) + for (std::size_t i = 0; i < intervals_in_dimension_0.size(); i++) std::cout << "intervals_in_dimension_0[" << i << "] = [" << intervals_in_dimension_0[i].first << "," << intervals_in_dimension_0[i].second << "]" << std::endl; BOOST_CHECK(intervals_in_dimension_0.size() == 2); @@ -136,7 +136,7 @@ BOOST_AUTO_TEST_CASE( plain_homology_betti_numbers ) auto intervals_in_dimension_1 = pcoh.intervals_in_dimension(1); std::cout << "intervals_in_dimension_1.size() = " << intervals_in_dimension_1.size() << std::endl; - for (int i = 0; i < intervals_in_dimension_1.size(); i++) + for (std::size_t i = 0; i < intervals_in_dimension_1.size(); i++) std::cout << "intervals_in_dimension_1[" << i << "] = [" << intervals_in_dimension_1[i].first << "," << intervals_in_dimension_1[i].second << "]" << std::endl; BOOST_CHECK(intervals_in_dimension_1.size() == 1); @@ -267,7 +267,7 @@ BOOST_AUTO_TEST_CASE( betti_numbers ) auto intervals_in_dimension_0 = pcoh.intervals_in_dimension(0); std::cout << "intervals_in_dimension_0.size() = " << intervals_in_dimension_0.size() << std::endl; - for (int i = 0; i < intervals_in_dimension_0.size(); i++) + for (std::size_t i = 0; i < intervals_in_dimension_0.size(); i++) std::cout << "intervals_in_dimension_0[" << i << "] = [" << intervals_in_dimension_0[i].first << "," << intervals_in_dimension_0[i].second << "]" << std::endl; BOOST_CHECK(intervals_in_dimension_0.size() == 2); @@ -278,7 +278,7 @@ BOOST_AUTO_TEST_CASE( betti_numbers ) auto intervals_in_dimension_1 = pcoh.intervals_in_dimension(1); std::cout << "intervals_in_dimension_1.size() = " << intervals_in_dimension_1.size() << std::endl; - for (int i = 0; i < intervals_in_dimension_1.size(); i++) + for (std::size_t i = 0; i < intervals_in_dimension_1.size(); i++) std::cout << "intervals_in_dimension_1[" << i << "] = [" << intervals_in_dimension_1[i].first << "," << intervals_in_dimension_1[i].second << "]" << std::endl; BOOST_CHECK(intervals_in_dimension_1.size() == 1); diff --git a/src/Subsampling/example/example_custom_kernel.cpp b/src/Subsampling/example/example_custom_kernel.cpp index 05797ebe..f87ef0b3 100644 --- a/src/Subsampling/example/example_custom_kernel.cpp +++ b/src/Subsampling/example/example_custom_kernel.cpp @@ -7,7 +7,7 @@ #include -/* The class Kernel contains a distance function defined on the set of points {0,1,2,3} +/* The class Kernel contains a distance function defined on the set of points {0, 1, 2, 3} * and computes a distance according to the matrix: * 0 1 2 4 * 1 0 4 2 @@ -15,41 +15,35 @@ * 4 2 1 0 */ class Kernel { -public: + public: typedef double FT; typedef unsigned Point_d; // Class Squared_distance_d class Squared_distance_d { - private: + private: std::vector> matrix_; - - public: - Squared_distance_d() - { - matrix_.push_back(std::vector({0,1,2,4})); - matrix_.push_back(std::vector({1,0,4,2})); - matrix_.push_back(std::vector({2,4,0,1})); - matrix_.push_back(std::vector({4,2,1,0})); - } - - FT operator()(Point_d p1, Point_d p2) - { + public: + Squared_distance_d() { + matrix_.push_back(std::vector({0,1,2,4})); + matrix_.push_back(std::vector({1,0,4,2})); + matrix_.push_back(std::vector({2,4,0,1})); + matrix_.push_back(std::vector({4,2,1,0})); + } + + FT operator()(Point_d p1, Point_d p2) { return matrix_[p1][p2]; } }; // Constructor - Kernel() - {} + Kernel() {} // Object of type Squared_distance_d - Squared_distance_d squared_distance_d_object() const - { + Squared_distance_d squared_distance_d_object() const { return Squared_distance_d(); } - }; int main(void) { @@ -57,9 +51,9 @@ int main(void) { typedef typename K::Point_d Point_d; K k; - std::vector points = {0,1,2,3}; + std::vector points = {0, 1, 2, 3}; std::vector results; - + Gudhi::subsampling::choose_n_farthest_points(k, points, 2, std::back_inserter(results)); std::cout << "Before sparsification: " << points.size() << " points.\n"; std::cout << "After sparsification: " << results.size() << " points.\n"; diff --git a/src/Subsampling/include/gudhi/sparsify_point_set.h b/src/Subsampling/include/gudhi/sparsify_point_set.h index 7ff11b4c..507f8c79 100644 --- a/src/Subsampling/include/gudhi/sparsify_point_set.h +++ b/src/Subsampling/include/gudhi/sparsify_point_set.h @@ -64,8 +64,6 @@ sparsify_point_set( typedef typename Gudhi::spatial_searching::Kd_tree_search< Kernel, Point_range> Points_ds; - typename Kernel::Squared_distance_d sqdist = k.squared_distance_d_object(); - #ifdef GUDHI_SUBSAMPLING_PROFILING Gudhi::Clock t; #endif diff --git a/src/common/include/gudhi/random_point_generators.h b/src/common/include/gudhi/random_point_generators.h index 3050b7ea..c643a1e3 100644 --- a/src/common/include/gudhi/random_point_generators.h +++ b/src/common/include/gudhi/random_point_generators.h @@ -338,8 +338,6 @@ std::vector generate_points_on_3sphere_and_circle(std: std::vector points; points.reserve(num_points); - typename Kernel::Translated_point_d k_transl = - k.translated_point_d_object(); typename Kernel::Compute_coordinate_d k_coord = k.compute_coordinate_d_object(); for (std::size_t i = 0; i < num_points;) { -- cgit v1.2.3 From a07a50640eaa4006cd532c1ec166a527b9ee8920 Mon Sep 17 00:00:00 2001 From: vrouvrea Date: Fri, 16 Dec 2016 16:35:31 +0000 Subject: Fix cppcheck warnings git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/trunk@1906 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: abb0875f5cfe3b3d0ce738257efc3f4c0fb57adc --- src/Persistent_cohomology/include/gudhi/Persistent_cohomology.h | 2 +- src/Subsampling/example/example_custom_kernel.cpp | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) (limited to 'src/Subsampling/example') diff --git a/src/Persistent_cohomology/include/gudhi/Persistent_cohomology.h b/src/Persistent_cohomology/include/gudhi/Persistent_cohomology.h index 681de8c6..bc8099e6 100644 --- a/src/Persistent_cohomology/include/gudhi/Persistent_cohomology.h +++ b/src/Persistent_cohomology/include/gudhi/Persistent_cohomology.h @@ -110,7 +110,7 @@ class Persistent_cohomology { cell_pool_() { if (cpx_->num_simplices() > std::numeric_limits::max()) { // num_simplices must be strictly lower than the limit, because a value is reserved for null_key. - throw std::out_of_range ("The number of simplices is more than Simplex_key type numeric limit."); + throw std::out_of_range("The number of simplices is more than Simplex_key type numeric limit."); } Simplex_key idx_fil = 0; for (auto sh : cpx_->filtration_simplex_range()) { diff --git a/src/Subsampling/example/example_custom_kernel.cpp b/src/Subsampling/example/example_custom_kernel.cpp index f87ef0b3..25b5bf6c 100644 --- a/src/Subsampling/example/example_custom_kernel.cpp +++ b/src/Subsampling/example/example_custom_kernel.cpp @@ -26,10 +26,10 @@ class Kernel { public: Squared_distance_d() { - matrix_.push_back(std::vector({0,1,2,4})); - matrix_.push_back(std::vector({1,0,4,2})); - matrix_.push_back(std::vector({2,4,0,1})); - matrix_.push_back(std::vector({4,2,1,0})); + matrix_.push_back(std::vector({0, 1, 2, 4})); + matrix_.push_back(std::vector({1, 0, 4, 2})); + matrix_.push_back(std::vector({2, 4, 0, 1})); + matrix_.push_back(std::vector({4, 2, 1, 0})); } FT operator()(Point_d p1, Point_d p2) { -- cgit v1.2.3