template class mrpt::math::CVectorDynamic
Overview
Template for column vectors of dynamic size, compatible with Eigen.
For a complete introduction to Matrices and vectors in MRPT, see: http://www.mrpt.org/Matrices_vectors_arrays_and_Linear_Algebra_MRPT_and_Eigen_classes
See also:
CVectorDynamic, CMatrixFixed, CVectorFixed
#include <mrpt/math/CVectorDynamic.h> template <class T> class CVectorDynamic: public mrpt::math::MatrixVectorBase { public: // typedefs typedef T value_type; typedef T Scalar; typedef int Index; typedef T& reference; typedef const T& const_reference; typedef int size_type; typedef std::ptrdiff_t difference_type; typedef Eigen::Matrix<T, -1, 1, 0, -1, 1> eigen_t; typedef typename vec_t::iterator iterator; typedef typename vec_t::const_iterator const_iterator; // fields static constexpr static int RowsAtCompileTime = -1; static constexpr static int ColsAtCompileTime = 1; static constexpr static int is_mrpt_type = 1; // construction CVectorDynamic(); CVectorDynamic(size_t N, bool initZero = true); template <typename U> CVectorDynamic(const CVectorDynamic<U>& m); template <std::size_t ROWS> CVectorDynamic(const CMatrixFixed<T, ROWS, 1>& v); template <typename ARRAY, typename = std::enable_if_t<std::is_array_v<ARRAY>>> CVectorDynamic(const ARRAY& data); template <class Derived> CVectorDynamic(const Eigen::MatrixBase<Derived>& m); // methods iterator begin(); iterator end(); const_iterator begin() const; const_iterator end() const; const_iterator cbegin() const; const_iterator cend() const; void realloc(size_t new_len, bool newElementsToZero = false); void swap(CVectorDynamic<T>& o); size_type rows() const; size_type cols() const; size_type size() const; bool empty() const; void setSize(size_t row, size_t col, bool zeroNewElements = false); void resize( std::size_t N, bool zeroNewElements = false ); template <class MAT> void fromVectorLike(const MAT& m); template <typename U> CVectorDynamic& operator = (const CMatrixDynamic<U>& m); template <class Derived> CVectorDynamic& operator = (const Eigen::MatrixBase<Derived>& m); template <std::size_t ROWS> CVectorDynamic& operator = (const CMatrixFixed<T, ROWS, 1>& v); void push_back(const T& val); template <int LEN> CMatrixFixed<Scalar, LEN, 1> segmentCopy(int start = 0) const; CVectorDynamic<Scalar> segmentCopy(int start, int LEN) const; T& operator () (size_t row, size_t col); const T& operator () (size_t row, size_t col) const; T& operator [] (size_t ith); const T& operator [] (size_t ith) const; template < typename EIGEN_VECTOR = eigen_t, typename EIGEN_MAP = Eigen::Map<EIGEN_VECTOR, MRPT_MAX_ALIGN_BYTES, Eigen::InnerStride<1>> > EIGEN_MAP asEigen(); template < typename EIGEN_VECTOR = Eigen::Matrix<T, -1, 1, 0, -1, 1>, typename EIGEN_MAP = Eigen::Map<const EIGEN_VECTOR, MRPT_MAX_ALIGN_BYTES, Eigen::InnerStride<1>> > EIGEN_MAP asEigen() const; template <typename T2> CVectorDynamic<T2> cast() const; };
Inherited Members
public: // methods void setConstant(const Scalar value); void setConstant(size_t nrows, size_t ncols, const Scalar value); void setConstant(size_t nrows, const Scalar value); void assign(const std::size_t N, const Scalar value); void setZero(); void setZero(size_t nrows, size_t ncols); void setZero(size_t nrows); static Derived Constant(const Scalar value); static Derived Constant(size_t nrows, size_t ncols, const Scalar value); static Derived Zero(); static Derived Zero(size_t nrows, size_t ncols); auto block(int start_row, int start_col, int BLOCK_ROWS, int BLOCK_COLS); auto block(int start_row, int start_col, int BLOCK_ROWS, int BLOCK_COLS) const; auto transpose(); auto transpose() const; auto array(); auto array() const; auto operator - () const; template <typename S2, class D2> auto operator + (const MatrixVectorBase<S2, D2>& m2) const; template <typename S2, class D2> void operator += (const MatrixVectorBase<S2, D2>& m2); template <typename S2, class D2> auto operator - (const MatrixVectorBase<S2, D2>& m2) const; template <typename S2, class D2> void operator -= (const MatrixVectorBase<S2, D2>& m2); template <typename S2, class D2> auto operator * (const MatrixVectorBase<S2, D2>& m2) const; auto operator * (const Scalar s) const; template <int N> CMatrixFixed<Scalar, N, 1> tail() const; template <int N> CMatrixFixed<Scalar, N, 1> head() const; Scalar& coeffRef(int r, int c); const Scalar& coeff(int r, int c) const; Scalar minCoeff(std::size_t& outIndexOfMin) const; Scalar minCoeff(std::size_t& rowIdx, std::size_t& colIdx) const; Scalar maxCoeff(std::size_t& outIndexOfMax) const; Scalar maxCoeff(std::size_t& rowIdx, std::size_t& colIdx) const; void operator += (Scalar s); void operator -= (Scalar s); void operator *= (Scalar s); CMatrixDynamic<Scalar> operator * (const CMatrixDynamic<Scalar>& v); Derived operator + (const Derived& m2) const; void operator += (const Derived& m2); Derived operator - (const Derived& m2) const; void operator -= (const Derived& m2); Derived operator * (const Derived& m2) const; Scalar dot(const MatrixVectorBase<Scalar, Derived>& v) const; template <typename OTHERMATVEC> bool operator == (const OTHERMATVEC& o) const; template <typename OTHERMATVEC> bool operator != (const OTHERMATVEC& o) const; Derived& mvbDerived(); const Derived& mvbDerived() const;
Typedefs
typedef T value_type
The type of the matrix elements.
Construction
CVectorDynamic(size_t N, bool initZero = true)
Initializes to a vector of “N” zeros.
template <typename U> CVectorDynamic(const CVectorDynamic<U>& m)
Copy (casting from if needed) from another matrix
template <std::size_t ROWS> CVectorDynamic(const CMatrixFixed<T, ROWS, 1>& v)
Ctor from a fixed-size vector.
template <typename ARRAY, typename = std::enable_if_t<std::is_array_v<ARRAY>>> CVectorDynamic(const ARRAY& data)
Constructor from a given size and a C array.
The array length must match cols x row.
const double numbers[] = { 1,2,3, 4,5,6 }; CMatrixDouble M(3,2, numbers);
template <class Derived> CVectorDynamic(const Eigen::MatrixBase<Derived>& m)
Convert from Eigen matrix.
Methods
void realloc(size_t new_len, bool newElementsToZero = false)
Internal use only: It reallocs the memory for the 2D matrix, maintaining the previous contents if posible.
size_type rows() const
Number of rows in the vector.
size_type cols() const
Number of columns in the matrix (always 1)
size_type size() const
Get a 2-vector with [NROWS NCOLS] (as in MATLAB command size(x))
void setSize(size_t row, size_t col, bool zeroNewElements = false)
Changes the size of matrix, maintaining the previous contents.
template <typename U> CVectorDynamic& operator = (const CMatrixDynamic<U>& m)
Assignment operator from another matrix (possibly of a different type)
template <class Derived> CVectorDynamic& operator = (const Eigen::MatrixBase<Derived>& m)
Assignment from an Eigen matrix.
template <std::size_t ROWS> CVectorDynamic& operator = (const CMatrixFixed<T, ROWS, 1>& v)
Assignment from a fixed-size vector.
template <int LEN> CMatrixFixed<Scalar, LEN, 1> segmentCopy(int start = 0) const
const segmentCopy() : Returns a copy of the given vector segment
CVectorDynamic<Scalar> segmentCopy(int start, int LEN) const
const segmentCopy() : Returns a copy of the given vector segment (non templated version, dynamic length)
T& operator () (size_t row, size_t col)
Subscript operator to get/set individual elements.
const T& operator () (size_t row, size_t col) const
Subscript operator to get individual elements.
T& operator [] (size_t ith)
Subscript operator to get/set an individual element from a row or column matrix.
Parameters:
std::exception |
If the object is not a column or row matrix. |
const T& operator [] (size_t ith) const
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
template < typename EIGEN_VECTOR = eigen_t, typename EIGEN_MAP = Eigen::Map<EIGEN_VECTOR, MRPT_MAX_ALIGN_BYTES, Eigen::InnerStride<1>> > EIGEN_MAP asEigen()
Get as an Eigen-compatible Eigen::Map object