Wenn ich den Mittelwert einer Liste von float
s wie folgt berechne
def mean(x):
sum(x) / len(x)
dann interessieren mich winzige Fehler bei Gleitkommaoperationen normalerweise nicht. Derzeit stehe ich jedoch vor einem Problem, bei dem ich alle Elemente in einer Liste erhalten möchte, die dem Durchschnitt der Liste entsprechen oder überlist
diesem liegen .
Auch dies ist normalerweise kein Problem, aber wenn ich auf Fälle stoße, in denen alle Elemente in der Liste gleiche Gleitkommazahlen sind als der von der obigen Funktion berechnete Mittelwert, wird tatsächlich ein Wert über allen Elementen zurückgegeben. Das ist in meinem Fall offensichtlich ein Problem.
Ich brauche eine Problemumgehung, die keine Zuverlässigkeit für python3.x-Bibliotheken beinhaltet (wie z. B. Statistiken).
Bearbeiten: In den Kommentaren wurde vorgeschlagen, Rundungen zu verwenden. Dies führte interessanterweise dazu, dass Fehler seltener waren, aber dennoch auftreten, wie z. B. in diesem Fall:
[0.024484987, 0.024484987, 0.024484987, 0.024484987, ...] # x
0.024485 # mean
[] # numbers above mean
Ich glaube, Sie sollten math.fsum()
anstelle von verwenden sum
. Zum Beispiel:
>>> a = [0.024484987, 0.024484987, 0.024484987, 0.024484987] * 1360001
>>> math.fsum(a) / len(a)
0.024484987
Dies ist, glaube ich, die Antwort, nach der Sie suchen. Unabhängig von der Länge der Ergebnisse werden konsistentere Ergebnisse erzielt a
als bei gleichwertiger Verwendung sum()
.
>>> sum(a) / len(a)
0.024484987003073517
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen