11#ifndef PICK_N_RANDOM_POINTS_H_
12#define PICK_N_RANDOM_POINTS_H_
14#ifdef GUDHI_SUBSAMPLING_PROFILING
15# include <gudhi/Clock.h>
18#include <boost/range/size.hpp>
30namespace subsampling {
40template <
typename Point_container,
41typename OutputIterator>
43 std::size_t final_size,
44 OutputIterator output_it) {
45#ifdef GUDHI_SUBSAMPLING_PROFILING
49 std::random_device rd;
52#if __cplusplus >= 201703L
53 std::sample(std::begin(points), std::end(points), output_it, final_size, g);
55 std::size_t nbP = boost::size(points);
59 std::vector<int> landmarks(nbP);
60 std::iota(landmarks.begin(), landmarks.end(), 0);
62 std::shuffle(landmarks.begin(), landmarks.end(), g);
63 landmarks.resize(final_size);
65 for (
int l : landmarks)
66 *output_it++ = points[l];
69#ifdef GUDHI_SUBSAMPLING_PROFILING
71 std::cerr <<
"Random landmark choice took " << t.num_seconds()
72 <<
" seconds." << std::endl;
void pick_n_random_points(Point_container const &points, std::size_t final_size, OutputIterator output_it)
Subsample a point set by picking random vertices.
Definition: pick_n_random_points.h:42