diff --git a/src/cpp/flann/util/random.h b/src/cpp/flann/util/random.h index f8493c0273dec75fdf2511327060d3b0a77b6271..8b8791b916e1950efd64c1bc5df83176390a689f 100644 --- a/src/cpp/flann/util/random.h +++ b/src/cpp/flann/util/random.h @@ -74,6 +74,14 @@ inline int rand_int(int high = RAND_MAX, int low = 0) return low + (int) ( double(high-low) * (std::rand() / (RAND_MAX + 1.0))); } + +class RandomGenerator +{ +public: + ptrdiff_t operator() (ptrdiff_t i) { return rand_int(i); } +}; + + /** * Random number generator that returns a distinct number from * the [0,n) interval each time. @@ -101,13 +109,14 @@ public: */ void init(int n) { + static RandomGenerator generator; // create and initialize an array of size n vals_.resize(n); size_ = n; for (int i = 0; i < size_; ++i) vals_[i] = i; // shuffle the elements in the array - std::random_shuffle(vals_.begin(), vals_.end()); + std::random_shuffle(vals_.begin(), vals_.end(), generator); counter_ = 0; } diff --git a/src/python/pyflann/bindings/flann_ctypes.py b/src/python/pyflann/bindings/flann_ctypes.py index 79d47567bedc0da1771f5bf4214abeb161950a1d..c32958272cf1d96abc6ffe3dcc037dae673774c4 100644 --- a/src/python/pyflann/bindings/flann_ctypes.py +++ b/src/python/pyflann/bindings/flann_ctypes.py @@ -95,6 +95,9 @@ class FLANNParameters(CustomStructure): ('build_weight', c_float), ('memory_weight', c_float), ('sample_fraction', c_float), + ('table_number_', c_uint), + ('key_size_', c_uint), + ('multi_probe_level_', c_uint), ('log_level', c_int), ('random_seed', c_long), ] @@ -112,6 +115,9 @@ class FLANNParameters(CustomStructure): 'build_weight' : 0.01, 'memory_weight' : 0.0, 'sample_fraction' : 0.1, + 'table_number_': 12, + 'key_size_': 20, + 'multi_probe_level_': 2, 'log_level' : "warning", 'random_seed' : -1 }