Wie finde ich den Durchschnitt in einer GROSSEN Menge von Zahlen?

Wie finde ich den Durchschnitt in einer GROSSEN Menge von Zahlen?

Sie können aus Ihrem Satz ("Population") zufällig Stichproben ziehen, um einen Durchschnitt ("Mittelwert") zu erhalten. Die Genauigkeit wird dadurch bestimmt, wie stark Ihre Proben variieren (bestimmt durch „Standardabweichung“ oder Varianz).

Der Vorteil ist, dass Sie Milliarden von Beobachtungen haben und nur einen Bruchteil davon abtasten müssen, um eine anständige Genauigkeit oder den "Vertrauensbereich" Ihrer Wahl zu erhalten. Wenn die Bedingungen stimmen, reduziert dies Ihren Arbeitsaufwand.

Hier ist eine numerische Bibliothek für C#, die einen Zufallssequenzgenerator enthält. Erstellen Sie einfach eine zufällige Folge von Zahlen, die auf Indizes in Ihrem Array von Elementen verweisen (von 1 bis x , die Anzahl der Elemente in Ihrem Array). Dereferenzieren Sie die Werte, und berechnen Sie dann Ihren Mittelwert und Ihre Standardabweichung.

Wenn Sie die Verteilung Ihrer Daten testen möchten, sollten Sie den Chi-Quadrat-Fit-Test oder den K-S-Test verwenden, die Sie in vielen Tabellenkalkulations- und Statistikpaketen (z. B. R) finden. Das hilft zu bestätigen, ob dieser Ansatz brauchbar ist oder nicht.


Ganzzahlen oder Floats?

Wenn es sich um ganze Zahlen handelt, müssen Sie eine Häufigkeitsverteilung akkumulieren, indem Sie die Zahlen lesen und aufzeichnen, wie viele von jedem Wert Sie sehen. Das kann leicht gemittelt werden.

Für Fließkommazahlen ist dies ein kleines Problem. Angesichts der Gesamtreichweite der Floats und der tatsächlichen Verteilung müssen Sie eine Bin-Größe ausarbeiten, die die gewünschte Genauigkeit beibehält, ohne alle Zahlen beizubehalten.

Bearbeiten

Zuerst müssen Sie Ihre Daten abtasten, um einen Mittelwert und eine Standardabweichung zu erhalten. Ein paar tausend Punkte sollten gut genug sein.

Dann müssen Sie einen respektablen Bereich bestimmen. Die Leute wählen Dinge wie ±6σ (Standardabweichungen) um den Mittelwert herum. Sie teilen diesen Bereich in so viele Eimer auf, wie Sie stehen können.

Tatsächlich bestimmt die Anzahl der Buckets die Anzahl signifikanter Stellen in Ihrem Durchschnitt. Wählen Sie also 10.000 oder 100.000 Buckets aus, um eine Genauigkeit von 4 oder 5 Stellen zu erhalten. Da es sich um eine Messung handelt, stehen die Chancen gut, dass Ihre Messungen nur zwei oder drei Ziffern haben.

Bearbeiten

Sie werden feststellen, dass der Mittelwert Ihrer ersten Stichprobe sehr nahe am Mittelwert jeder anderen Stichprobe liegt. Und jeder Stichprobenmittelwert liegt nahe am Mittelwert der Grundgesamtheit. Sie werden feststellen, dass die meisten (aber nicht alle) Ihrer Mittelwerte eine Standardabweichung voneinander haben.

Sie sollten feststellen, dass Ihre Messfehler und Ungenauigkeiten größer als Ihre Standardabweichung sind.

Das bedeutet, dass ein Stichprobenmittelwert genauso nützlich ist wie ein Populationsmittelwert.


Wäre ein gleitender Durchschnitt nicht so genau wie alles andere (abgesehen von Rundungsfehlern, meine ich)? Es könnte wegen der ganzen Teilung etwas langsam sein.

Sie könnten Zahlenstapel gruppieren und rekursiv mitteln. Wie durchschnittlich 100 Zahlen 100 Mal, dann durchschnittlich das Ergebnis. Dies wäre weniger prügelnd und hauptsächlich eine Ergänzung.

Wenn Sie 256 oder 512 auf einmal hinzufügen, können Sie das Ergebnis möglicherweise um 8 oder 9 Bit verschieben (ich glaube, Sie könnten dies in einem Double tun, indem Sie einfach die Gleitkomma-Mantisse ändern) - das würde reichen Ihr Programm extrem schnell und es könnte rekursiv in nur wenigen Codezeilen geschrieben werden (abgesehen von der unsicheren Operation der Mantissenverschiebung).

Vielleicht würde eine Division durch 256 diese Optimierung bereits nutzen? Ich muss möglicherweise einen Geschwindigkeitstest durchführen, indem ich durch 255 vs. 256 dividiere, und sehen, ob es eine massive Verbesserung gibt. Ich vermute nicht.