-
Notifications
You must be signed in to change notification settings - Fork 0
/
utility.hpp
35 lines (32 loc) · 1.18 KB
/
utility.hpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
template<class InputIt> void
printList (InputIt first, InputIt last)
{
while(first != last)
std::cerr << *first++ << ' ';
std::cerr << '\n';
}
template<int Flags=Eigen::ColMajor, typename Derived>
std::vector<typename Derived::Scalar>
eigenMatrixToStdVector(const Eigen::DenseBase<Derived> &m) {
typedef typename Derived::Scalar Scalar;
std::vector<Scalar> out(m.size());
Eigen::Map<Eigen::Matrix<Scalar, Eigen::Dynamic, Eigen::Dynamic, Flags> >
(out.data(), m.rows(), m.cols()) = m;
return out;
}
template <int Flags=Eigen::ColMajor, typename Scalar>
Eigen::Map<const Eigen::Matrix<Scalar, Eigen::Dynamic, Eigen::Dynamic, Flags> >
stdVectorToEigenMatrix(const std::vector<Scalar> &v, int rows, int cols)
{
assert((size_t)(rows*cols) == v.size());
return Eigen::Map<const Eigen::Matrix<Scalar, Eigen::Dynamic, Eigen::Dynamic, Flags> >
(v.data(), rows, cols);
}
template <int Flags=0, typename Scalar>
Eigen::Map<const Eigen::Matrix<Scalar, Eigen::Dynamic, 1, Flags> >
stdVectorToEigenVector(const std::vector<Scalar> &v, int length)
{
assert((size_t)length == v.size());
return Eigen::Map<const Eigen::Matrix<Scalar, Eigen::Dynamic, 1, Flags> >
(v.data(), length);
}