// Function: MatrixAxisMean
// Purpose: Returns the mean of the values in one axis of a matrix
//{{XLP_SRC(MatrixAxisMean)
// NOTE - the FunctionWizard will add and remove mapping code here.
// DO NOT EDIT what you see in these blocks of generated code!
IMPLEMENT_XLLFN2(MatrixAxisMean, "RPI", "MatrixAxisMean",
"m,axis", "Math & Trig", "Returns the mean of the values in"
" one axis of a matrix", "Square input matrix\000Axis - 0 or"
" 1\000", "B0()0()m Square input matrix\0\0", 1)
extern "C" __declspec( dllexport )
LPXLOPER MatrixAxisMean(const COper* m, short axis)
{
CXlOper xloResult;
BOOL bOk = TRUE;
MTX_PTRS<double> matm;
bOk = bOk && m->ReadMatrix(matm, "m", xloResult, 0, 0, XLA_ARRAY_FLAGS_STD, 0, 0);
if (!bOk)
return xloResult.Ret();
//}}XLP_SRC
// Check that the matrix is square & not empty
if (matm.size(0) != matm.size(1))
return CXlOper::RetString("#Error: Expected a square matrix for m");
if (matm.size(0) == 0)
return CXlOper::RetString("#Error: Expected a non-empty square matrix for m");
// Traverse the matrix
int i, n = matm.size(0);
double dSum = 0.0;
for (i = 0; i < n; i++)
dSum += (axis == 0) ? matm[i][i] : matm[i][n - (1 + i)];
dSum /= (double)n;
// Return the result
xloResult = dSum;
return xloResult.Ret();
}
mtx_ptrs<T> | mtx_ptrs<T>::size | mtx_ptrs<T>::operator [] const