public static Value Mean(MatrixValue M)
{
if (M.Length == 0)
{
return ScalarValue.Zero;
}
if (M.IsVector)
{
var q = ScalarValue.One;
for (var i = 1; i <= M.Length; i++)
{
q *= M[i];
}
return q.Pow(new ScalarValue(1.0 / M.Length));
}
var s = new MatrixValue(1, M.DimensionX);
for (var i = 1; i < M.DimensionX; i++)
{
s[1, i] = ScalarValue.One;
}
for (var i = 1; i <= M.DimensionY; i++)
{
for (var j = 1; j <= M.DimensionX; j++)
{
s[1, j] *= M[i, j];
}
}
for (var j = 1; j <= s.DimensionX; j++)
{
s[1, j] = s[1, j].Pow(new ScalarValue(1.0 / M.DimensionY));
}
return s;
}