mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-06-04 18:54:00 +08:00
*add missing overloads of setZero, etc... that were mentioned in the tutorial
--->they go into Matrix as they resize. *add isConstant() alias to isApproxToConstant() *extend unit-test *change an assert into a static assert
This commit is contained in:
parent
0c0d38272e
commit
4f0af00e51
@ -110,7 +110,7 @@ MatrixBase<Derived>::Random()
|
|||||||
* Example: \include MatrixBase_setRandom.cpp
|
* Example: \include MatrixBase_setRandom.cpp
|
||||||
* Output: \verbinclude MatrixBase_setRandom.out
|
* Output: \verbinclude MatrixBase_setRandom.out
|
||||||
*
|
*
|
||||||
* \sa class CwiseNullaryOp, MatrixBase::setRandom(int,int)
|
* \sa class CwiseNullaryOp, setRandom(int), setRandom(int,int)
|
||||||
*/
|
*/
|
||||||
template<typename Derived>
|
template<typename Derived>
|
||||||
inline Derived& MatrixBase<Derived>::setRandom()
|
inline Derived& MatrixBase<Derived>::setRandom()
|
||||||
@ -118,4 +118,39 @@ inline Derived& MatrixBase<Derived>::setRandom()
|
|||||||
return *this = Random(rows(), cols());
|
return *this = Random(rows(), cols());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Resizes to the given \a size, and sets all coefficients in this expression to random values.
|
||||||
|
*
|
||||||
|
* \only_for_vectors
|
||||||
|
*
|
||||||
|
* Example: \include Matrix_setRandom_int.cpp
|
||||||
|
* Output: \verbinclude Matrix_setRandom_int.out
|
||||||
|
*
|
||||||
|
* \sa MatrixBase::setRandom(), setRandom(int,int), class CwiseNullaryOp, MatrixBase::Random()
|
||||||
|
*/
|
||||||
|
template<typename _Scalar, int _Rows, int _Cols, int _Options, int _MaxRows, int _MaxCols>
|
||||||
|
EIGEN_STRONG_INLINE Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols>&
|
||||||
|
Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols>::setRandom(int size)
|
||||||
|
{
|
||||||
|
resize(size);
|
||||||
|
return setRandom();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Resizes to the given size, and sets all coefficients in this expression to random values.
|
||||||
|
*
|
||||||
|
* \param rows the new number of rows
|
||||||
|
* \param cols the new number of columns
|
||||||
|
*
|
||||||
|
* Example: \include Matrix_setRandom_int_int.cpp
|
||||||
|
* Output: \verbinclude Matrix_setRandom_int_int.out
|
||||||
|
*
|
||||||
|
* \sa MatrixBase::setRandom(), setRandom(int), class CwiseNullaryOp, MatrixBase::Random()
|
||||||
|
*/
|
||||||
|
template<typename _Scalar, int _Rows, int _Cols, int _Options, int _MaxRows, int _MaxCols>
|
||||||
|
EIGEN_STRONG_INLINE Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols>&
|
||||||
|
Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols>::setRandom(int rows, int cols)
|
||||||
|
{
|
||||||
|
resize(rows, cols);
|
||||||
|
return setRandom();
|
||||||
|
}
|
||||||
|
|
||||||
#endif // EIGEN_RANDOM_H
|
#endif // EIGEN_RANDOM_H
|
||||||
|
@ -146,6 +146,7 @@ template<typename CustomNullaryOp>
|
|||||||
EIGEN_STRONG_INLINE const CwiseNullaryOp<CustomNullaryOp, Derived>
|
EIGEN_STRONG_INLINE const CwiseNullaryOp<CustomNullaryOp, Derived>
|
||||||
MatrixBase<Derived>::NullaryExpr(int size, const CustomNullaryOp& func)
|
MatrixBase<Derived>::NullaryExpr(int size, const CustomNullaryOp& func)
|
||||||
{
|
{
|
||||||
|
EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived)
|
||||||
ei_assert(IsVectorAtCompileTime);
|
ei_assert(IsVectorAtCompileTime);
|
||||||
if(RowsAtCompileTime == 1) return CwiseNullaryOp<CustomNullaryOp, Derived>(1, size, func);
|
if(RowsAtCompileTime == 1) return CwiseNullaryOp<CustomNullaryOp, Derived>(1, size, func);
|
||||||
else return CwiseNullaryOp<CustomNullaryOp, Derived>(size, 1, func);
|
else return CwiseNullaryOp<CustomNullaryOp, Derived>(size, 1, func);
|
||||||
@ -227,6 +228,7 @@ MatrixBase<Derived>::Constant(const Scalar& value)
|
|||||||
return NullaryExpr(RowsAtCompileTime, ColsAtCompileTime, ei_scalar_constant_op<Scalar>(value));
|
return NullaryExpr(RowsAtCompileTime, ColsAtCompileTime, ei_scalar_constant_op<Scalar>(value));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** \returns true if all coefficients in this matrix are approximately equal to \a value, to within precision \a prec */
|
||||||
template<typename Derived>
|
template<typename Derived>
|
||||||
bool MatrixBase<Derived>::isApproxToConstant
|
bool MatrixBase<Derived>::isApproxToConstant
|
||||||
(const Scalar& value, RealScalar prec) const
|
(const Scalar& value, RealScalar prec) const
|
||||||
@ -238,6 +240,16 @@ bool MatrixBase<Derived>::isApproxToConstant
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** This is just an alias for isApproxToConstant().
|
||||||
|
*
|
||||||
|
* \returns true if all coefficients in this matrix are approximately equal to \a value, to within precision \a prec */
|
||||||
|
template<typename Derived>
|
||||||
|
bool MatrixBase<Derived>::isConstant
|
||||||
|
(const Scalar& value, RealScalar prec) const
|
||||||
|
{
|
||||||
|
return isApproxToConstant(value, prec);
|
||||||
|
}
|
||||||
|
|
||||||
/** Alias for setConstant(): sets all coefficients in this expression to \a value.
|
/** Alias for setConstant(): sets all coefficients in this expression to \a value.
|
||||||
*
|
*
|
||||||
* \sa setConstant(), Constant(), class CwiseNullaryOp
|
* \sa setConstant(), Constant(), class CwiseNullaryOp
|
||||||
@ -250,7 +262,7 @@ EIGEN_STRONG_INLINE void MatrixBase<Derived>::fill(const Scalar& value)
|
|||||||
|
|
||||||
/** Sets all coefficients in this expression to \a value.
|
/** Sets all coefficients in this expression to \a value.
|
||||||
*
|
*
|
||||||
* \sa fill(), Constant(), class CwiseNullaryOp, setZero(), setOnes()
|
* \sa fill(), setConstant(int,const Scalar&), setConstant(int,int,const Scalar&), setZero(), setOnes(), Constant(), class CwiseNullaryOp, setZero(), setOnes()
|
||||||
*/
|
*/
|
||||||
template<typename Derived>
|
template<typename Derived>
|
||||||
EIGEN_STRONG_INLINE Derived& MatrixBase<Derived>::setConstant(const Scalar& value)
|
EIGEN_STRONG_INLINE Derived& MatrixBase<Derived>::setConstant(const Scalar& value)
|
||||||
@ -258,6 +270,42 @@ EIGEN_STRONG_INLINE Derived& MatrixBase<Derived>::setConstant(const Scalar& valu
|
|||||||
return derived() = Constant(rows(), cols(), value);
|
return derived() = Constant(rows(), cols(), value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Resizes to the given \a size, and sets all coefficients in this expression to the given \a value.
|
||||||
|
*
|
||||||
|
* \only_for_vectors
|
||||||
|
*
|
||||||
|
* Example: \include Matrix_set_int.cpp
|
||||||
|
* Output: \verbinclude Matrix_setConstant_int.out
|
||||||
|
*
|
||||||
|
* \sa MatrixBase::setConstant(const Scalar&), setConstant(int,int,const Scalar&), class CwiseNullaryOp, MatrixBase::Constant(const Scalar&)
|
||||||
|
*/
|
||||||
|
template<typename _Scalar, int _Rows, int _Cols, int _Options, int _MaxRows, int _MaxCols>
|
||||||
|
EIGEN_STRONG_INLINE Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols>&
|
||||||
|
Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols>::setConstant(int size, const Scalar& value)
|
||||||
|
{
|
||||||
|
resize(size);
|
||||||
|
return setConstant(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Resizes to the given size, and sets all coefficients in this expression to the given \a value.
|
||||||
|
*
|
||||||
|
* \param rows the new number of rows
|
||||||
|
* \param cols the new number of columns
|
||||||
|
*
|
||||||
|
* Example: \include Matrix_setConstant_int_int.cpp
|
||||||
|
* Output: \verbinclude Matrix_setConstant_int_int.out
|
||||||
|
*
|
||||||
|
* \sa MatrixBase::setConstant(const Scalar&), setConstant(int,const Scalar&), class CwiseNullaryOp, MatrixBase::Constant(const Scalar&)
|
||||||
|
*/
|
||||||
|
template<typename _Scalar, int _Rows, int _Cols, int _Options, int _MaxRows, int _MaxCols>
|
||||||
|
EIGEN_STRONG_INLINE Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols>&
|
||||||
|
Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols>::setConstant(int rows, int cols, const Scalar& value)
|
||||||
|
{
|
||||||
|
resize(rows, cols);
|
||||||
|
return setConstant(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// zero:
|
// zero:
|
||||||
|
|
||||||
/** \returns an expression of a zero matrix.
|
/** \returns an expression of a zero matrix.
|
||||||
@ -354,6 +402,41 @@ EIGEN_STRONG_INLINE Derived& MatrixBase<Derived>::setZero()
|
|||||||
return setConstant(Scalar(0));
|
return setConstant(Scalar(0));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Resizes to the given \a size, and sets all coefficients in this expression to zero.
|
||||||
|
*
|
||||||
|
* \only_for_vectors
|
||||||
|
*
|
||||||
|
* Example: \include Matrix_setZero_int.cpp
|
||||||
|
* Output: \verbinclude Matrix_setZero_int.out
|
||||||
|
*
|
||||||
|
* \sa MatrixBase::setZero(), setZero(int,int), class CwiseNullaryOp, MatrixBase::Zero()
|
||||||
|
*/
|
||||||
|
template<typename _Scalar, int _Rows, int _Cols, int _Options, int _MaxRows, int _MaxCols>
|
||||||
|
EIGEN_STRONG_INLINE Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols>&
|
||||||
|
Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols>::setZero(int size)
|
||||||
|
{
|
||||||
|
resize(size);
|
||||||
|
return setConstant(Scalar(0));
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Resizes to the given size, and sets all coefficients in this expression to zero.
|
||||||
|
*
|
||||||
|
* \param rows the new number of rows
|
||||||
|
* \param cols the new number of columns
|
||||||
|
*
|
||||||
|
* Example: \include Matrix_setZero_int_int.cpp
|
||||||
|
* Output: \verbinclude Matrix_setZero_int_int.out
|
||||||
|
*
|
||||||
|
* \sa MatrixBase::setZero(), setZero(int), class CwiseNullaryOp, MatrixBase::Zero()
|
||||||
|
*/
|
||||||
|
template<typename _Scalar, int _Rows, int _Cols, int _Options, int _MaxRows, int _MaxCols>
|
||||||
|
EIGEN_STRONG_INLINE Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols>&
|
||||||
|
Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols>::setZero(int rows, int cols)
|
||||||
|
{
|
||||||
|
resize(rows, cols);
|
||||||
|
return setConstant(Scalar(0));
|
||||||
|
}
|
||||||
|
|
||||||
// ones:
|
// ones:
|
||||||
|
|
||||||
/** \returns an expression of a matrix where all coefficients equal one.
|
/** \returns an expression of a matrix where all coefficients equal one.
|
||||||
@ -447,6 +530,41 @@ EIGEN_STRONG_INLINE Derived& MatrixBase<Derived>::setOnes()
|
|||||||
return setConstant(Scalar(1));
|
return setConstant(Scalar(1));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Resizes to the given \a size, and sets all coefficients in this expression to one.
|
||||||
|
*
|
||||||
|
* \only_for_vectors
|
||||||
|
*
|
||||||
|
* Example: \include Matrix_setOnes_int.cpp
|
||||||
|
* Output: \verbinclude Matrix_setOnes_int.out
|
||||||
|
*
|
||||||
|
* \sa MatrixBase::setOnes(), setOnes(int,int), class CwiseNullaryOp, MatrixBase::Ones()
|
||||||
|
*/
|
||||||
|
template<typename _Scalar, int _Rows, int _Cols, int _Options, int _MaxRows, int _MaxCols>
|
||||||
|
EIGEN_STRONG_INLINE Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols>&
|
||||||
|
Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols>::setOnes(int size)
|
||||||
|
{
|
||||||
|
resize(size);
|
||||||
|
return setConstant(Scalar(1));
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Resizes to the given size, and sets all coefficients in this expression to one.
|
||||||
|
*
|
||||||
|
* \param rows the new number of rows
|
||||||
|
* \param cols the new number of columns
|
||||||
|
*
|
||||||
|
* Example: \include Matrix_setOnes_int_int.cpp
|
||||||
|
* Output: \verbinclude Matrix_setOnes_int_int.out
|
||||||
|
*
|
||||||
|
* \sa MatrixBase::setOnes(), setOnes(int), class CwiseNullaryOp, MatrixBase::Ones()
|
||||||
|
*/
|
||||||
|
template<typename _Scalar, int _Rows, int _Cols, int _Options, int _MaxRows, int _MaxCols>
|
||||||
|
EIGEN_STRONG_INLINE Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols>&
|
||||||
|
Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols>::setOnes(int rows, int cols)
|
||||||
|
{
|
||||||
|
resize(rows, cols);
|
||||||
|
return setConstant(Scalar(1));
|
||||||
|
}
|
||||||
|
|
||||||
// Identity:
|
// Identity:
|
||||||
|
|
||||||
/** \returns an expression of the identity matrix (not necessarily square).
|
/** \returns an expression of the identity matrix (not necessarily square).
|
||||||
@ -556,6 +674,24 @@ EIGEN_STRONG_INLINE Derived& MatrixBase<Derived>::setIdentity()
|
|||||||
return ei_setIdentity_impl<Derived>::run(derived());
|
return ei_setIdentity_impl<Derived>::run(derived());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Resizes to the given size, and writes the identity expression (not necessarily square) into *this.
|
||||||
|
*
|
||||||
|
* \param rows the new number of rows
|
||||||
|
* \param cols the new number of columns
|
||||||
|
*
|
||||||
|
* Example: \include Matrix_setIdentity_int_int.cpp
|
||||||
|
* Output: \verbinclude Matrix_setIdentity_int_int.out
|
||||||
|
*
|
||||||
|
* \sa MatrixBase::setIdentity(), class CwiseNullaryOp, MatrixBase::Identity()
|
||||||
|
*/
|
||||||
|
template<typename _Scalar, int _Rows, int _Cols, int _Options, int _MaxRows, int _MaxCols>
|
||||||
|
EIGEN_STRONG_INLINE Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols>&
|
||||||
|
Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols>::setIdentity(int rows, int cols)
|
||||||
|
{
|
||||||
|
resize(rows, cols);
|
||||||
|
return setIdentity();
|
||||||
|
}
|
||||||
|
|
||||||
/** \returns an expression of the i-th unit (basis) vector.
|
/** \returns an expression of the i-th unit (basis) vector.
|
||||||
*
|
*
|
||||||
* \only_for_vectors
|
* \only_for_vectors
|
||||||
|
@ -446,6 +446,25 @@ class Matrix
|
|||||||
{ return AlignedMapType(data, rows, cols); }
|
{ return AlignedMapType(data, rows, cols); }
|
||||||
//@}
|
//@}
|
||||||
|
|
||||||
|
using Base::setConstant;
|
||||||
|
Matrix& setConstant(int size, const Scalar& value);
|
||||||
|
Matrix& setConstant(int rows, int cols, const Scalar& value);
|
||||||
|
|
||||||
|
using Base::setZero;
|
||||||
|
Matrix& setZero(int size);
|
||||||
|
Matrix& setZero(int rows, int cols);
|
||||||
|
|
||||||
|
using Base::setOnes;
|
||||||
|
Matrix& setOnes(int size);
|
||||||
|
Matrix& setOnes(int rows, int cols);
|
||||||
|
|
||||||
|
using Base::setRandom;
|
||||||
|
Matrix& setRandom(int size);
|
||||||
|
Matrix& setRandom(int rows, int cols);
|
||||||
|
|
||||||
|
using Base::setIdentity;
|
||||||
|
Matrix& setIdentity(int rows, int cols);
|
||||||
|
|
||||||
/////////// Geometry module ///////////
|
/////////// Geometry module ///////////
|
||||||
|
|
||||||
template<typename OtherDerived>
|
template<typename OtherDerived>
|
||||||
|
@ -481,6 +481,7 @@ template<typename Derived> class MatrixBase
|
|||||||
RealScalar prec = precision<Scalar>()) const;
|
RealScalar prec = precision<Scalar>()) const;
|
||||||
|
|
||||||
bool isApproxToConstant(const Scalar& value, RealScalar prec = precision<Scalar>()) const;
|
bool isApproxToConstant(const Scalar& value, RealScalar prec = precision<Scalar>()) const;
|
||||||
|
bool isConstant(const Scalar& value, RealScalar prec = precision<Scalar>()) const;
|
||||||
bool isZero(RealScalar prec = precision<Scalar>()) const;
|
bool isZero(RealScalar prec = precision<Scalar>()) const;
|
||||||
bool isOnes(RealScalar prec = precision<Scalar>()) const;
|
bool isOnes(RealScalar prec = precision<Scalar>()) const;
|
||||||
bool isIdentity(RealScalar prec = precision<Scalar>()) const;
|
bool isIdentity(RealScalar prec = precision<Scalar>()) const;
|
||||||
|
@ -167,7 +167,7 @@ x = VectorXf::Random(size);
|
|||||||
x.setZero(size);
|
x.setZero(size);
|
||||||
x.setOnes(size);
|
x.setOnes(size);
|
||||||
x.setConstant(size, value);
|
x.setConstant(size, value);
|
||||||
x.setIdentity(size);
|
N/A
|
||||||
x.setRandom(size);
|
x.setRandom(size);
|
||||||
\endcode
|
\endcode
|
||||||
</td>
|
</td>
|
||||||
|
@ -54,7 +54,9 @@ template<typename MatrixType> void cwiseops(const MatrixType& m)
|
|||||||
square = Matrix<Scalar, MatrixType::RowsAtCompileTime, MatrixType::RowsAtCompileTime>::Random(rows, rows);
|
square = Matrix<Scalar, MatrixType::RowsAtCompileTime, MatrixType::RowsAtCompileTime>::Random(rows, rows);
|
||||||
VectorType v1 = VectorType::Random(rows),
|
VectorType v1 = VectorType::Random(rows),
|
||||||
v2 = VectorType::Random(rows),
|
v2 = VectorType::Random(rows),
|
||||||
vzero = VectorType::Zero(rows);
|
vzero = VectorType::Zero(rows),
|
||||||
|
vones = VectorType::Ones(rows),
|
||||||
|
v3(rows);
|
||||||
|
|
||||||
int r = ei_random<int>(0, rows-1),
|
int r = ei_random<int>(0, rows-1),
|
||||||
c = ei_random<int>(0, cols-1);
|
c = ei_random<int>(0, cols-1);
|
||||||
@ -70,12 +72,22 @@ template<typename MatrixType> void cwiseops(const MatrixType& m)
|
|||||||
VERIFY_IS_APPROX(mones(i,j), Scalar(1));
|
VERIFY_IS_APPROX(mones(i,j), Scalar(1));
|
||||||
VERIFY_IS_APPROX(m3(i,j), s1);
|
VERIFY_IS_APPROX(m3(i,j), s1);
|
||||||
}
|
}
|
||||||
|
VERIFY(mzero.isZero());
|
||||||
|
VERIFY(mones.isOnes());
|
||||||
|
VERIFY(m3.isConstant(s1));
|
||||||
|
VERIFY(identity.isIdentity());
|
||||||
VERIFY_IS_APPROX(m4.setConstant(s1), m3);
|
VERIFY_IS_APPROX(m4.setConstant(s1), m3);
|
||||||
|
VERIFY_IS_APPROX(m4.setConstant(rows,cols,s1), m3);
|
||||||
VERIFY_IS_APPROX(m4.setZero(), mzero);
|
VERIFY_IS_APPROX(m4.setZero(), mzero);
|
||||||
|
VERIFY_IS_APPROX(m4.setZero(rows,cols), mzero);
|
||||||
VERIFY_IS_APPROX(m4.setOnes(), mones);
|
VERIFY_IS_APPROX(m4.setOnes(), mones);
|
||||||
|
VERIFY_IS_APPROX(m4.setOnes(rows,cols), mones);
|
||||||
m4.fill(s1);
|
m4.fill(s1);
|
||||||
VERIFY_IS_APPROX(m4, m3);
|
VERIFY_IS_APPROX(m4, m3);
|
||||||
|
|
||||||
|
VERIFY_IS_APPROX(v3.setConstant(rows, s1), VectorType::Constant(rows,s1));
|
||||||
|
VERIFY_IS_APPROX(v3.setZero(rows), vzero);
|
||||||
|
VERIFY_IS_APPROX(v3.setOnes(rows), vones);
|
||||||
|
|
||||||
m2 = m2.template binaryExpr<AddIfNull<Scalar> >(mones);
|
m2 = m2.template binaryExpr<AddIfNull<Scalar> >(mones);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user