irlba
A C++ library for IRLBA
Loading...
Searching...
No Matches
Options.hpp
Go to the documentation of this file.
1#ifndef IRLBA_OPTIONS_HPP
2#define IRLBA_OPTIONS_HPP
3
4#include <random>
5#include <optional>
6#include "Eigen/Dense"
7
13namespace irlba {
14
20template<class EigenVector_ = Eigen::VectorXd>
21struct Options {
30 std::optional<double> invariant_subspace_tolerance;
31
39 double convergence_tolerance = 1e-5;
40
48 std::optional<double> singular_value_ratio_tolerance;
49
56 std::optional<Eigen::Index> extra_work;
57
62 int max_iterations = 1000;
63
69
75
80 bool cap_number = false;
81
85 typename std::mt19937_64::result_type seed = std::mt19937_64::default_seed;
86
91 std::optional<EigenVector_> initial;
92};
93
97template<typename Float_, class EigenVector_>
98Float_ choose_invariant_tolerance(const Options<EigenVector_>& options) {
99 const auto& tol = options.invariant_subspace_tolerance;
100 if (tol.has_value() && *tol >= 0) { // check it's non-negative for back-compatibility.
101 return *tol;
102 } else {
103 return std::pow(std::numeric_limits<Float_>::epsilon(), 0.8);
104 }
105}
106
107template<class EigenVector_>
108double choose_singular_value_tolerance(const Options<EigenVector_>& options) {
109 const auto& svtol = options.singular_value_ratio_tolerance;
110 if (svtol.has_value() && *svtol >= 0) {
111 return *svtol;
112 } else {
113 return options.convergence_tolerance;
114 }
115}
120}
121
122#endif
123
Options for running IRLBA in compute() and pca().
Definition Options.hpp:21
std::optional< double > invariant_subspace_tolerance
Definition Options.hpp:30
double convergence_tolerance
Definition Options.hpp:39
std::optional< double > singular_value_ratio_tolerance
Definition Options.hpp:48
bool exact_for_large_number
Definition Options.hpp:74
int max_iterations
Definition Options.hpp:62
std::optional< EigenVector_ > initial
Definition Options.hpp:91
bool exact_for_small_matrix
Definition Options.hpp:68
bool cap_number
Definition Options.hpp:80
std::optional< Eigen::Index > extra_work
Definition Options.hpp:56
std::mt19937_64::result_type seed
Definition Options.hpp:85