export stableNorm(), blueNorm() and hypotNorm() to colwise() and rowwise()
+ rudimentary test
This commit is contained in:
		
							parent
							
								
									dca80b5f22
								
							
						
					
					
						commit
						f795681da0
					
				| @ -121,6 +121,9 @@ class PartialReduxExpr : ei_no_assignment_operator, | ||||
| 
 | ||||
| EIGEN_MEMBER_FUNCTOR(squaredNorm, Size * NumTraits<Scalar>::MulCost + (Size-1)*NumTraits<Scalar>::AddCost); | ||||
| EIGEN_MEMBER_FUNCTOR(norm, (Size+5) * NumTraits<Scalar>::MulCost + (Size-1)*NumTraits<Scalar>::AddCost); | ||||
| EIGEN_MEMBER_FUNCTOR(stableNorm, (Size+5) * NumTraits<Scalar>::MulCost + (Size-1)*NumTraits<Scalar>::AddCost); | ||||
| EIGEN_MEMBER_FUNCTOR(blueNorm, (Size+5) * NumTraits<Scalar>::MulCost + (Size-1)*NumTraits<Scalar>::AddCost); | ||||
| EIGEN_MEMBER_FUNCTOR(hypotNorm, (Size-1) * ei_functor_traits<ei_scalar_hypot_op<Scalar> >::Cost ); | ||||
| EIGEN_MEMBER_FUNCTOR(sum, (Size-1)*NumTraits<Scalar>::AddCost); | ||||
| EIGEN_MEMBER_FUNCTOR(mean, (Size-1)*NumTraits<Scalar>::AddCost + NumTraits<Scalar>::MulCost); | ||||
| EIGEN_MEMBER_FUNCTOR(minCoeff, (Size-1)*NumTraits<Scalar>::AddCost); | ||||
| @ -288,6 +291,33 @@ template<typename ExpressionType, int Direction> class VectorwiseOp | ||||
|     const typename ReturnType<ei_member_norm>::Type norm() const | ||||
|     { return _expression(); } | ||||
| 
 | ||||
| 
 | ||||
|     /** \returns a row (or column) vector expression of the norm
 | ||||
|       * of each column (or row) of the referenced expression, using | ||||
|       * blue's algorithm. | ||||
|       * | ||||
|       * \sa MatrixBase::blueNorm() */ | ||||
|     const typename ReturnType<ei_member_blueNorm>::Type blueNorm() const | ||||
|     { return _expression(); } | ||||
| 
 | ||||
| 
 | ||||
|     /** \returns a row (or column) vector expression of the norm
 | ||||
|       * of each column (or row) of the referenced expression, avoiding | ||||
|       * underflow and overflow. | ||||
|       * | ||||
|       * \sa MatrixBase::stableNorm() */ | ||||
|     const typename ReturnType<ei_member_stableNorm>::Type stableNorm() const | ||||
|     { return _expression(); } | ||||
| 
 | ||||
| 
 | ||||
|     /** \returns a row (or column) vector expression of the norm
 | ||||
|       * of each column (or row) of the referenced expression, avoiding | ||||
|       * underflow and overflow using a concatenation of hypot() calls. | ||||
|       * | ||||
|       * \sa MatrixBase::hypotNorm() */ | ||||
|     const typename ReturnType<ei_member_hypotNorm>::Type hypotNorm() const | ||||
|     { return _expression(); } | ||||
| 
 | ||||
|     /** \returns a row (or column) vector expression of the sum
 | ||||
|       * of each column (or row) of the referenced expression. | ||||
|       * | ||||
|  | ||||
| @ -79,6 +79,14 @@ template<typename MatrixType> void stable_norm(const MatrixType& m) | ||||
|   VERIFY_IS_APPROX(static_cast<Scalar>(vsmall.stableNorm()), ei_sqrt(size)*small); | ||||
|   VERIFY_IS_APPROX(static_cast<Scalar>(vsmall.blueNorm()),   ei_sqrt(size)*small); | ||||
|   VERIFY_IS_APPROX(static_cast<Scalar>(vsmall.hypotNorm()),  ei_sqrt(size)*small); | ||||
| 
 | ||||
| // Test compilation of cwise() version
 | ||||
|   VERIFY_IS_APPROX(vrand.colwise().stableNorm(),      vrand.colwise().norm()); | ||||
|   VERIFY_IS_APPROX(vrand.colwise().blueNorm(),        vrand.colwise().norm()); | ||||
|   VERIFY_IS_APPROX(vrand.colwise().hypotNorm(),       vrand.colwise().norm()); | ||||
|   VERIFY_IS_APPROX(vrand.rowwise().stableNorm(),      vrand.rowwise().norm()); | ||||
|   VERIFY_IS_APPROX(vrand.rowwise().blueNorm(),        vrand.rowwise().norm()); | ||||
|   VERIFY_IS_APPROX(vrand.rowwise().hypotNorm(),       vrand.rowwise().norm()); | ||||
| } | ||||
| 
 | ||||
| void test_stable_norm() | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Thomas Capricelli
						Thomas Capricelli