OpenANN  1.1.0
An open source library for artificial neural networks.
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
EigenWrapper.h
Go to the documentation of this file.
1 #ifndef OPENANN_UTIL_EIGEN_WRAPPER_H_
2 #define OPENANN_UTIL_EIGEN_WRAPPER_H_
3 
5 #include <Eigen/Core>
6 #include <cmath>
7 #include <cstdarg>
8 
9 template<typename T, int M, int N>
10 bool equals(const Eigen::Matrix<T, M, N>& a, const Eigen::Matrix<T, M, N>& b, T delta)
11 {
12  Eigen::Matrix<T, M, N> d = a - b;
13  for(int i = 0; i < d.rows(); i++) for(int j = 0; j < d.cols(); j++)
14  {
15  if(std::fabs(d(i, j)) > delta)
16  return false;
17  }
18  return true;
19 }
20 
21 #define OPENANN_CHECK_MATRIX_NAN(matrix) \
22  OPENANN_CHECK(!isMatrixNan(matrix));
23 
24 template<typename T, int M, int N>
25 bool isMatrixNan(const Eigen::Matrix<T, M, N> m)
26 {
27  for(int i = 0; i < m.rows(); i++) for(int j = 0; j < m.cols(); j++)
28  {
29  if(std::isnan(m(i, j)))
30  return true;
31  }
32  return false;
33 }
34 
35 #define OPENANN_CHECK_MATRIX_INF(matrix) \
36  OPENANN_CHECK(!isMatrixInf(matrix));
37 
38 template<typename T, int M, int N>
39 bool isMatrixInf(const Eigen::Matrix<T, M, N> m)
40 {
41  for(int i = 0; i < m.rows(); i++) for(int j = 0; j < m.cols(); j++)
42  {
43  if(std::isinf(m(i, j)))
44  return true;
45  }
46  return false;
47 }
48 
49 #define OPENANN_CHECK_MATRIX_BROKEN(matrix) \
50  OPENANN_CHECK(!isMatrixBroken(matrix));
51 
52 template<typename T, int M, int N>
53 bool isMatrixBroken(const Eigen::Matrix<T, M, N> m)
54 {
55  return isMatrixNan(m) || isMatrixInf(m);
56 }
57 
58 void pack(Eigen::VectorXd& vec, int components, ...);
59 
60 void unpack(const Eigen::VectorXd& vec, int components, ...);
61 
62 #endif // OPENANN_UTIL_EIGEN_WRAPPER_H_