Lange (20 Millionen Elemente) Array-Summierung in Python numpy

8

Ich bin neu bei Python und numpy, bitte entschuldigt mich, wenn dieses Problem so rudimentär ist! Ich habe ein Array von negativen Werten (es ist sortiert):

%Vor%

Ich muss dieses Array zu seinem Duplikat hinzufügen (aber mit positiven Werten), um die Standardabweichung der Verteilung gemittelt auf Null zu finden. Also mache ich folgendes:

%Vor%

Bisher ist alles sehr gut, aber die seltsame Sache ist, dass die Summe dieses neuen Arrays nicht Null ist:

%Vor%

Die Standardabweichung ist auch nicht annähernd so, wie ich es erwartet habe, aber ich denke, die Wurzel dieses Problems ist die gleiche: Warum ergibt sich die Summe nicht in Null?

Wenn ich diese Methode auf ein kleines Array anwende; zum Beispiel [-5, -3, -2] wird die Summe Null. Also ich schätze das Problem liegt in der Länge des Arrays (über 20 Millionen Elemente). Gibt es eine Möglichkeit, mit diesem Problem umzugehen?

Wenn mir jemand dabei helfen könnte, wäre ich sehr dankbar.

    
makhlaghi 22.12.2011, 04:11
quelle

1 Antwort

3

Wie in den Kommentaren erwähnt, erhalten Sie Float-Roundoff-Probleme durch das Aufsummieren von vielen Millionen gleich signierter Zahlen. Ein möglicher Weg dazu könnte sein, positive und negative Zahlen im kombinierten Array zu mischen, so dass Zwischenergebnisse während der Zusammenfassung immer ungefähr in der gleichen Größenordnung bleiben:

%Vor%

Jetzt sollte combined.sum() ziemlich nahe bei Null liegen.

Vielleicht wird dieser Ansatz auch dazu beitragen, die Präzision bei der Berechnung der Standardabweichung zu verbessern.

    
silvado 22.12.2011, 09:36
quelle

Tags und Links