Blaze  3.6
DVecMeanExpr.h
Go to the documentation of this file.
1 //=================================================================================================
33 //=================================================================================================
34 
35 #ifndef _BLAZE_MATH_EXPRESSIONS_DVECMEANEXPR_H_
36 #define _BLAZE_MATH_EXPRESSIONS_DVECMEANEXPR_H_
37 
38 
39 //*************************************************************************************************
40 // Includes
41 //*************************************************************************************************
42 
43 #include <blaze/math/Exception.h>
48 #include <blaze/util/Assert.h>
51 #include <blaze/util/Types.h>
52 
53 
54 namespace blaze {
55 
56 //=================================================================================================
57 //
58 // GLOBAL FUNCTIONS
59 //
60 //=================================================================================================
61 
62 //*************************************************************************************************
70 template< typename VT // Type of the dense vector
71  , bool TF > // Transpose flag
72 inline decltype(auto) mean_backend( const DenseVector<VT,TF>& dv, FalseType )
73 {
74  using BT = UnderlyingBuiltin_t<VT>;
75 
76  BLAZE_INTERNAL_ASSERT( size( ~dv ) > 0UL, "Invalid vector size detected" );
77 
78  return sum( ~dv ) * inv( BT( size( ~dv ) ) );
79 }
81 //*************************************************************************************************
82 
83 
84 //*************************************************************************************************
92 template< typename VT // Type of the dense vector
93  , bool TF > // Transpose flag
94 inline decltype(auto) mean_backend( const DenseVector<VT,TF>& dv, TrueType )
95 {
96  BLAZE_INTERNAL_ASSERT( size( ~dv ) > 0UL, "Invalid vector size detected" );
97 
98  return (~dv)[0];
99 }
101 //*************************************************************************************************
102 
103 
104 //*************************************************************************************************
126 template< typename VT // Type of the dense vector
127  , bool TF > // Transpose flag
128 inline decltype(auto) mean( const DenseVector<VT,TF>& dv )
129 {
131 
132  if( size( ~dv ) == 0UL ) {
133  BLAZE_THROW_INVALID_ARGUMENT( "Invalid input vector" );
134  }
135 
136  return mean_backend( ~dv, IsUniform<VT>() );
137 }
138 //*************************************************************************************************
139 
140 } // namespace blaze
141 
142 #endif
BoolConstant< false > FalseType
Type/value traits base class.The FalseType class is used as base class for type traits and value trai...
Definition: IntegralConstant.h:121
#define BLAZE_THROW_INVALID_ARGUMENT(MESSAGE)
Macro for the emission of a std::invalid_argument exception.This macro encapsulates the default way o...
Definition: Exception.h:235
Header file for basic type definitions.
Compile time check for uniform vectors and matrices.This type trait tests whether or not the given te...
Definition: IsUniform.h:105
Header file for the DenseVector base class.
Header file for the invert shim.
BoolConstant< true > TrueType
Type traits base class.The TrueType class is used as base class for type traits and value traits that...
Definition: IntegralConstant.h:132
Header file for the IsUniform type trait.
Namespace of the Blaze C++ math library.
Definition: Blaze.h:58
Header file for the UnderlyingBuiltin type trait.
decltype(auto) sum(const DenseMatrix< MT, SO > &dm)
Reduces the given dense matrix by means of addition.
Definition: DMatReduceExpr.h:2147
decltype(auto) inv(const DenseMatrix< MT, SO > &dm)
Calculation of the inverse of the given dense matrix.
Definition: DMatInvExpr.h:423
Base class for N-dimensional dense vectors.The DenseVector class is a base class for all arbitrarily ...
Definition: DenseVector.h:76
Header file for the exception macros of the math module.
decltype(auto) mean(const DenseMatrix< MT, SO > &dm)
Computes the (arithmetic) mean for the given dense matrix.
Definition: DMatMeanExpr.h:134
Header file for run time assertion macros.
#define BLAZE_FUNCTION_TRACE
Function trace macro.This macro can be used to reliably trace function calls. In case function tracin...
Definition: FunctionTrace.h:94
constexpr size_t size(const Matrix< MT, SO > &matrix) noexcept
Returns the total number of elements of the matrix.
Definition: Matrix.h:530
Header file for the IntegralConstant class template.
#define BLAZE_INTERNAL_ASSERT(expr, msg)
Run time assertion macro for internal checks.In case of an invalid run time expression,...
Definition: Assert.h:101
Header file for the function trace functionality.