Mittelwert korrekt berechnen

Falc410

Vice Admiral
Registriert
Juni 2006
Beiträge
6.909
Ich will die Bewertungen eines Bildes korrekt berechnen. Die Benutzer können Werte von 0 bis 5 vergeben. Anschließend möchte ich den Durchschnittswert berechnen und ausgeben.
Mit dem Arithmetischen Mittel würde ich ja einfach alle Bewertungen summieren und durch die Anzahl teilen. Ich möchte aber nicht auf alle vorher abgegeben Ergebnisse zurückgreifen sondern nur auf den derzeitigen Mittelwert + die neue Bewertung und die Gesamtanzahl abgegebener Bewertungen.

Nehmen wir mal an es stimmen 3 Leute ab mit: 1,3,1 --> (1+3+1)/3 = 5/3
Wenn ich aber nach zwei Leuten schon den Wert bestimme und dann später den dritten dazu zähle, kommt ja etwas ganz anderes aus --> (1+3)/2 = 2 --> 2+1/3 = 7/3

Ich steh grad irgendwie auf dem Schlauch (muss wohl mal wieder mehr schlafen).
 
Du speicherst die aufgelaufene Summe sowie die Anzahl der abgegebenen Bewertungen. Alternativ kannst du mal nach "rolling average" bzw. "moving average" googlen.
 
Einfach die gesamt Punkte durch die Variable(Anzahl) dividieren?
 
also ich denke du musst folgendes tun:

neuer mittelwert = (alter mittelwert * anzahl der alten stimmen + neue stimme) / (anzahl der alten stimmen + 1)

wichtig ist, dass du die mittelwerte intern unbedingt als float / double speicherst sonst bekommst du rundungsfehler :)

nicht getestet.
bin außerdem krank geschrieben.
 
Du wirst wahrscheinlich nicht drumherum kommen, das Array oder die Variable neu zu befüllen. Überhaupt programmierst du gerade etwas oder gehts hier um eine simple Tabellenberechnung?
 
Danke für die Antworten. Moving Average ist schon einmal ein guter Hinweis, wobei immer noch relativ kompliziert (also von Anzahl der notwendingen Rechenoperationen aus betrachtet).

Ich versuch mal aroxx Version zu beweisen, wenn das korrekt ist wäre es natürlich super.

Edit: Ja es wird programmiert in Python
 
x: alter mittelwert
n: letzte anzahl der votes
z: letzter vote

(x * (n-1)) +z) / n

daher dann

(2 * (3-1)) + 1) / 3 = (4+1)/3 = 5/3


Problem ist dann die Genauigkeit der Werte. Könntest einfach die Anzahl der Stimmen und die Summe der Votes speichern und dann einfach immer die updaten, dann musste nicht ganze Array speichern und Berechnung des Mittelwerts wird genau sein.

Edit: okay, das letzte war nicht gewünscht, habe ich geschickt überlesen :)
 
Zuletzt bearbeitet:
Also entweder wie schon ausgeführt den Mittelwert und die Anzahl speichern, oder ansonsten die Anzahl und eine Gesamtsumme. Letzteres hätte den Vorteil, dass Rundungsfehler nicht mitgeschleppt werden. Mittelwert bildest du dann natürlich durch Gesamtsumme/Anzahl...

Also angenommen du hättest 1,3,1 --> Anzahl 3, Summe 5. Mittelwert kannst du jederzeit als 5/3 errechnen. Kommt noch eine 2 dazu, dann hast du Anzahl 4, Summe 7, Mittelwert also 7/4. Von den Rechenoperationen her sollte das effizienter sein, addieren von ganzen Zahlen, nur der Mittelwert ist eine reelle Zahl..

mfg
 
Zuletzt bearbeitet:
Eigentlich bin ich ein Depp, KainerM hat total Recht. Ich speicher mir einfach die Summe und die Anzahl und berechne den Mittelwert erst bei der Ausgabe / Anzeige anstatt direkt den Mittelwert in der DB zu speichern.

Da sieht man mal was mangelnde Konzentration ausmacht.
 
Zurück
Oben