Эта статья должна вам помочь. Он создает функцию, которая вычисляет отклонение последовательности значений double
. Все, что вам нужно сделать, это предоставить последовательность соответствующих элементов данных.
В результате получается следующая функция:
private double CalculateStdDev(IEnumerable<double> values)
{
double ret = 0;
if (values.Count() > 0)
{
//Compute the Average
double avg = values.Average();
//Perform the Sum of (value-avg)_2_2
double sum = values.Sum(d => Math.Pow(d - avg, 2));
//Put it all together
ret = Math.Sqrt((sum) / (values.Count()-1));
}
return ret;
}
Ее достаточно легко адаптировать для любого универсального типа, если мы предоставляем селектор для вычисляемого значения. LINQ отлично подходит для этого, функция Select
позволяет проецировать из вашего общего списка настраиваемых типов последовательность числовых значений, для которых вычисляется стандартное отклонение:
List<ValveData> list = ...
var result = list.Select( v => (double)v.SomeField )
.CalculateStdDev();