summaryrefslogtreecommitdiff
path: root/src/Subsampling
diff options
context:
space:
mode:
authorskachano <skachano@636b058d-ea47-450e-bf9e-a15bfbe3eedb>2016-12-14 18:08:09 +0000
committerskachano <skachano@636b058d-ea47-450e-bf9e-a15bfbe3eedb>2016-12-14 18:08:09 +0000
commit04f4501b35eaa2bd33393ef2445d038251ba1355 (patch)
treeb85b6cca1b28873c9289c1c904be5c1d5d5c0aa7 /src/Subsampling
parent9e8db290ff0b3f69f88fa5ed54482bfb6730ad9b (diff)
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
Diffstat (limited to 'src/Subsampling')
-rw-r--r--src/Subsampling/example/CMakeLists.txt1
-rw-r--r--src/Subsampling/example/example_custom_kernel.cpp69
-rw-r--r--src/Subsampling/include/gudhi/choose_n_farthest_points.h4
3 files changed, 73 insertions, 1 deletions
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 <gudhi/choose_n_farthest_points.h>
+
+#include <CGAL/Epick_d.h>
+#include <CGAL/Random.h>
+
+#include <vector>
+#include <iterator>
+
+
+/* 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<std::vector<FT>> matrix_;
+
+ public:
+
+ Squared_distance_d()
+ {
+ matrix_.push_back(std::vector<FT>({0,1,2,4}));
+ matrix_.push_back(std::vector<FT>({1,0,4,2}));
+ matrix_.push_back(std::vector<FT>({2,4,0,1}));
+ matrix_.push_back(std::vector<FT>({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<Point_d> points = {0,1,2,3};
+ std::vector<Point_d> 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;
+}
diff --git a/src/Subsampling/include/gudhi/choose_n_farthest_points.h b/src/Subsampling/include/gudhi/choose_n_farthest_points.h
index 43bf6402..b6b7ace3 100644
--- a/src/Subsampling/include/gudhi/choose_n_farthest_points.h
+++ b/src/Subsampling/include/gudhi/choose_n_farthest_points.h
@@ -52,6 +52,7 @@ namespace subsampling {
* concept <a target="_blank"
* href="http://doc.cgal.org/latest/Kernel_d/classKernel__d_1_1Squared__distance__d.html">Kernel_d::Squared_distance_d</a>
* concept.
+ * It must also contain a public member 'squared_distance_d_object' of this type.
* \tparam Point_range Range whose value type is Kernel::Point_d. It must provide random-access
* via `operator[]` and the points should be stored contiguously in memory.
* \tparam OutputIterator Output iterator whose value type is Kernel::Point_d.
@@ -112,6 +113,7 @@ void choose_n_farthest_points(Kernel const &k,
* concept <a target="_blank"
* href="http://doc.cgal.org/latest/Kernel_d/classKernel__d_1_1Squared__distance__d.html">Kernel_d::Squared_distance_d</a>
* concept.
+ * It must also contain a public member 'squared_distance_d_object' of this type.
* \tparam Point_range Range whose value type is Kernel::Point_d. It must provide random-access
* via `operator[]` and the points should be stored contiguously in memory.
* \tparam OutputIterator Output iterator whose value type is Kernel::Point_d.
@@ -133,7 +135,7 @@ void choose_n_farthest_points(Kernel const& k,
// Choose randomly the first landmark
std::random_device rd;
std::mt19937 gen(rd());
- std::uniform_int_distribution<> dis(1, 6);
+ std::uniform_int_distribution<> dis(0, final_size);
int starting_point = dis(gen);
choose_n_farthest_points(k, input_pts, final_size, starting_point, output_it);
}