Blaze  3.6
SVecMeanExpr.h
Go to the documentation of this file.
1 //=================================================================================================
33 //=================================================================================================
34 
35 #ifndef _BLAZE_MATH_EXPRESSIONS_SVECMEANEXPR_H_
36 #define _BLAZE_MATH_EXPRESSIONS_SVECMEANEXPR_H_
37 
38 
39 //*************************************************************************************************
40 // Includes
41 //*************************************************************************************************
42 
43 #include <blaze/math/Exception.h>
48 #include <blaze/util/Assert.h>
51 #include <blaze/util/MaybeUnused.h>
52 #include <blaze/util/Types.h>
53 
54 
55 namespace blaze {
56 
57 //=================================================================================================
58 //
59 // GLOBAL FUNCTIONS
60 //
61 //=================================================================================================
62 
63 //*************************************************************************************************
71 template< typename VT // Type of the sparse vector
72  , bool TF > // Transpose flag
73 inline decltype(auto) mean_backend( const SparseVector<VT,TF>& sv, FalseType )
74 {
75  using BT = UnderlyingBuiltin_t<VT>;
76 
77  BLAZE_INTERNAL_ASSERT( size( ~sv ) > 0UL, "Invalid vector size detected" );
78 
79  return sum( ~sv ) * inv( BT( size( ~sv ) ) );
80 }
82 //*************************************************************************************************
83 
84 
85 //*************************************************************************************************
93 template< typename VT // Type of the sparse vector
94  , bool TF > // Transpose flag
95 inline decltype(auto) mean_backend( const SparseVector<VT,TF>& sv, TrueType )
96 {
97  MAYBE_UNUSED( sv );
98 
99  BLAZE_INTERNAL_ASSERT( size( ~sv ) > 0UL, "Invalid vector size detected" );
100 
101  return ElementType_t<VT>();
102 }
104 //*************************************************************************************************
105 
106 
107 //*************************************************************************************************
130 template< typename VT // Type of the sparse vector
131  , bool TF > // Transpose flag
132 inline decltype(auto) mean( const SparseVector<VT,TF>& sv )
133 {
135 
136  if( size( ~sv ) == 0UL ) {
137  BLAZE_THROW_INVALID_ARGUMENT( "Invalid input vector" );
138  }
139 
140  return mean_backend( ~sv, IsZero<VT>() );
141 }
142 //*************************************************************************************************
143 
144 } // namespace blaze
145 
146 #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.
Header file for the SparseVector base class.
Header file for the MAYBE_UNUSED function template.
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
Compile time check for zero vectors or matrices.This type trait tests whether or not the given templa...
Definition: IsZero.h:107
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
constexpr void MAYBE_UNUSED(const Args &...)
Suppression of unused parameter warnings.
Definition: MaybeUnused.h:81
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.
Header file for the IsZero type trait.
#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
Base class for sparse vectors.The SparseVector class is a base class for all arbitrarily sized (N-dim...
Definition: Forward.h:146
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.