Стандартное отклонение универсального списка? [дубликат]

56
задан Brian Webster 2 November 2012 в 15:09
поделиться

1 ответ

Эта статья должна вам помочь. Он создает функцию, которая вычисляет отклонение последовательности значений 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();
63
ответ дан 26 November 2019 в 16:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: