Blaze 3.9
DMatMeanExpr.h
Go to the documentation of this file.
1//=================================================================================================
33//=================================================================================================
34
35#ifndef _BLAZE_MATH_EXPRESSIONS_DMATMEANEXPR_H_
36#define _BLAZE_MATH_EXPRESSIONS_DMATMEANEXPR_H_
37
38
39//*************************************************************************************************
40// Includes
41//*************************************************************************************************
42
50#include <blaze/util/Assert.h>
54#include <blaze/util/Types.h>
55
56
57namespace blaze {
58
59//=================================================================================================
60//
61// GLOBAL FUNCTIONS
62//
63//=================================================================================================
64
65//*************************************************************************************************
73template< typename MT // Type of the dense matrix
74 , bool SO > // Storage order
75inline decltype(auto) mean_backend( const DenseMatrix<MT,SO>& dm, FalseType )
76{
77 using BT = UnderlyingBuiltin_t<MT>;
78
79 BLAZE_INTERNAL_ASSERT( size( *dm ) > 0UL, "Invalid matrix size detected" );
80
81 return sum( *dm ) * inv( BT( size( *dm ) ) );
82}
84//*************************************************************************************************
85
86
87//*************************************************************************************************
95template< typename MT // Type of the dense matrix
96 , bool SO > // Storage order
97inline decltype(auto) mean_backend( const DenseMatrix<MT,SO>& dm, TrueType )
98{
99 BLAZE_INTERNAL_ASSERT( size( *dm ) > 0UL, "Invalid matrix size detected" );
100
101 return (*dm)(0UL,0UL);
102}
104//*************************************************************************************************
105
106
107//*************************************************************************************************
132template< typename MT // Type of the dense matrix
133 , bool SO > // Storage order
134inline decltype(auto) mean( const DenseMatrix<MT,SO>& dm )
135{
137
138 if( size( *dm ) == 0UL ) {
139 BLAZE_THROW_INVALID_ARGUMENT( "Invalid input matrix" );
140 }
141
142 return mean_backend( *dm, IsUniform<MT>() );
143}
144//*************************************************************************************************
145
146
147//*************************************************************************************************
155template< ReductionFlag RF // Reduction flag
156 , typename MT // Type of the dense matrix
157 , bool SO > // Storage order
158decltype(auto) mean_backend( const DenseMatrix<MT,SO>& dm, FalseType )
159{
160 using BT = UnderlyingBuiltin_t<MT>;
161
162 const size_t n( RF == rowwise ? columns( *dm ) : rows( *dm ) );
163
164 BLAZE_INTERNAL_ASSERT( n > 0UL, "Invalid matrix size detected" );
165
166 return sum<RF>( *dm ) * inv( BT( n ) );
167}
169//*************************************************************************************************
170
171
172//*************************************************************************************************
180template< ReductionFlag RF // Reduction flag
181 , typename MT // Type of the dense matrix
182 , bool SO > // Storage order
183decltype(auto) mean_backend( const DenseMatrix<MT,SO>& dm, TrueType )
184{
185 const size_t n( RF == rowwise ? rows( *dm ) : columns( *dm ) );
186
187 BLAZE_INTERNAL_ASSERT( n > 0UL, "Invalid matrix size detected" );
188
189 constexpr bool TF( ( RF == rowwise ? columnVector : rowVector ) );
190
191 return uniform<TF>( n, (*dm)(0UL,0UL) );
192}
194//*************************************************************************************************
195
196
197//*************************************************************************************************
232template< ReductionFlag RF // Reduction flag
233 , typename MT // Type of the dense matrix
234 , bool SO > // Storage order
235decltype(auto) mean( const DenseMatrix<MT,SO>& dm )
236{
238
239 BLAZE_STATIC_ASSERT_MSG( RF < 2UL, "Invalid reduction flag" );
240
241 const size_t n( RF == rowwise ? columns( *dm ) : rows( *dm ) );
242
243 if( n == 0UL ) {
244 BLAZE_THROW_INVALID_ARGUMENT( "Invalid input matrix" );
245 }
246
247 return mean_backend<RF>( *dm, IsUniform<MT>() );
248}
249//*************************************************************************************************
250
251} // namespace blaze
252
253#endif
Header file for run time assertion macros.
Header file for the function trace functionality.
Header file for the IntegralConstant class template.
Header file for the invert shim.
Header file for the IsUniform type trait.
Header file for the reduction flags.
constexpr ReductionFlag rowwise
Reduction flag for row-wise reduction operations.
Definition: ReductionFlag.h:77
size_t ReductionFlag
Type of the reduction flags.
Definition: ReductionFlag.h:57
Compile time assertion.
Header file for the UnderlyingBuiltin type trait.
Base class for dense matrices.
Definition: DenseMatrix.h:82
Header file for the implementation of a uniform vector.
Header file for the DenseMatrix base class.
decltype(auto) mean(const DenseMatrix< MT, SO > &dm)
Computes the row-/column-wise mean function for the given dense matrix.
Definition: DMatMeanExpr.h:235
decltype(auto) inv(const DenseMatrix< MT, SO > &dm)
Calculation of the inverse of the given dense matrix.
Definition: DMatInvExpr.h:405
decltype(auto) sum(const DenseMatrix< MT, SO > &dm)
Reduces the given dense matrix by means of addition.
Definition: DMatReduceExpr.h:2156
constexpr size_t rows(const Matrix< MT, SO > &matrix) noexcept
Returns the current number of rows of the matrix.
Definition: Matrix.h:644
constexpr size_t columns(const Matrix< MT, SO > &matrix) noexcept
Returns the current number of columns of the matrix.
Definition: Matrix.h:660
constexpr size_t size(const Matrix< MT, SO > &matrix) noexcept
Returns the total number of elements of the matrix.
Definition: Matrix.h:676
#define BLAZE_INTERNAL_ASSERT(expr, msg)
Run time assertion macro for internal checks.
Definition: Assert.h:101
#define BLAZE_STATIC_ASSERT_MSG(expr, msg)
Compile time assertion macro.
Definition: StaticAssert.h:123
BoolConstant< true > TrueType
Type traits base class.
Definition: IntegralConstant.h:132
BoolConstant< false > FalseType
Type/value traits base class.
Definition: IntegralConstant.h:121
#define BLAZE_THROW_INVALID_ARGUMENT(MESSAGE)
Macro for the emission of a std::invalid_argument exception.
Definition: Exception.h:235
#define BLAZE_FUNCTION_TRACE
Function trace macro.
Definition: FunctionTrace.h:94
Header file for the exception macros of the math module.
Compile time check for uniform vectors and matrices.
Definition: IsUniform.h:107
Header file for basic type definitions.