Écart-type de LINQ
N'modèle LINQ, le total de la fonction SQL STDDEV()
(écart-type)?
Si non, quel est le plus simple /les meilleures pratiques de la façon de le calculer?
Exemple:
SELECT test_id, AVERAGE(result) avg, STDDEV(result) std
FROM tests
GROUP BY test_id
- double possible de Comment puis-je déterminer l'écart-type (écart type) d'un ensemble de valeurs?
- vous pouvez, comme pour revisiter la accepté de répondre ici. Il y a des problèmes avec l'approche retenue que les gens qui n'en ont pas, faites défiler et lisez la suite pour ne pas voir.
- Pourquoi quelqu'un voudrait-il le faire à l'aide de LINQ?
Vous devez vous connecter pour publier un commentaire.
Vous pouvez faire votre propre extension de calcul
Si vous avez un échantillon de la population plutôt que l'ensemble de la population, alors vous devriez utiliser
ret = Math.Sqrt(sum /(count - 1));
.Transformé en extension à partir de L'ajout d'Écart-type de LINQ par Chris Bennett.
stdev = g.Select(o => o.number).StdDev()
.IEnumerable<T>
paramètres.- 1
? Selon ceci la- 1
est nécessaire.Dynami la réponse de travaux, mais effectue plusieurs passages à travers les données pour obtenir un résultat. C'est un seul passage méthode qui calcule le écart-type d'échantillon:
C'est le écart-type d'échantillon car il divise par
n - 1
. Pour l'écart-type vous avez besoin de diviser parn
à la place.Il utilise Welford de la méthode qui a le plus de précision numérique par rapport à la
Average(x^2)-Average(x)^2
méthode.this IEnumerable<double?> values
etval in values.Where(val => val != null)
. Aussi, je note que cette méthode (Welford de la méthode) est plus précis et plus rapide que la méthode ci-dessus.Ce convertit David Clarke répondre dans une extension qui suit la même forme que les autres agrégats LINQ des fonctions comme la Moyenne.
D'utilisation serait:
var stdev = data.StdDev(o => o.number)
Average
/Min
/Max
/etc ont des surcharges avec et sans sélecteur de fonctions. Ils ont aussi des surcharges pour les types intégraux, float, etc.count
.