Fleet  0.0.9
Inference in the LOT
EigenLib.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "Numerics.h"
4 
5 // turn off warnings for the rest of this
6 #pragma GCC system_header
7 
8 // This is just a header to include Eigen, but preven us from warning about it.
9 #include <cmath>
10 #include <eigen3/Eigen/Core>
11 #include <eigen3/Eigen/Dense>
12 #include <eigen3/Eigen/Eigenvalues>
13 #include <eigen3/unsupported/Eigen/SpecialFunctions>
14 #include "IO.h"
15 
16 // Define some useful names here
17 using Vector = Eigen::VectorXf;
18 using Matrix = Eigen::MatrixXf;
19 
20 // Woah this is WAAAY slower
21 //double logsumexp(const Vector& v) {
22 //
23 // double lse = -infinity;
24 // for(int i=0;i<v.size();i++) {
25 // lse = logplusexp((double)v(i), lse);
26 // }
27 // return lse;
28 //}
29 
30 double logsumexp_eigen(const Vector& v) {
31  double mx = v.maxCoeff();
32  return log((v.array()-mx).array().exp().sum()) + mx;
33 }
34 
36  return v.array() - logsumexp_eigen(v);
37 }
38 
39 Vector eigenslice(const Vector& v, const size_t offset, const size_t len) {
40  Vector out(len);
41  for(size_t i=0;i<len;i++) {
42  out(i) = v[i+offset];
43  }
44  return out;
45 }
46 
47 // And we define a macro so that other code in fleet can optionally include Eigen-compatible
48 // operations.
49 // NOTE that this requires us to include EigenLib before we import anything else (e.g. grammar)
50 #define AM_I_USING_EIGEN 1
Eigen::MatrixXf Matrix
Definition: EigenLib.h:18
Vector eigenslice(const Vector &v, const size_t offset, const size_t len)
Definition: EigenLib.h:39
double logsumexp_eigen(const Vector &v)
Definition: EigenLib.h:30
Vector lognormalize(const Vector &v)
Definition: EigenLib.h:35
Eigen::VectorXf Vector
Definition: EigenLib.h:17