schnell numpy addnan

8

Ich würde gerne Tausende von 4D-Arrays elementweise hinzufügen und Nans berücksichtigen. Ein einfaches Beispiel für 1D-Arrays wäre:

%Vor%

Ich habe eine einfache for-Schleife dafür geschrieben, aber es dauert ewig - keine clevere Lösung. Eine andere Lösung könnte sein, ein größeres Array zu erstellen und Engpaß Nansum zu verwenden, aber das würde zu viel Speicher für meinen Laptop benötigen. Ich brauche eine laufende Summe über 11000 Fälle.

Hat jemand einen klugen und schnellen Weg, dies zu tun?

    
Shejo284 23.08.2012, 17:01
quelle

5 Antworten

10

Hier ist eine Möglichkeit:

%Vor%

Die eigentliche Schwierigkeit besteht darin, dass Sie wollen, dass nan als Null interpretiert wird, es sei denn, alle Werte an einer bestimmten Position sind nan . Dies bedeutet, dass Sie sowohl x als auch y betrachten müssen, um festzulegen, welche Nans ersetzt werden sollen. Wenn es dir gutgeht, alle Nan-Werte zu ersetzen, kannst du einfach np.nan_to_num(x) + np.nan_to_num(y) machen.

    
BrenBarn 23.08.2012, 17:20
quelle
3

Sie könnten etwas tun wie:

%Vor%

um die Positionen in den Arrays zu finden, in denen beide ein NaN in diesem Index haben. Machen Sie dann im Wesentlichen das, was @mgilson vorgeschlagen hat, wie in make Kopien und ersetzen Sie die NaN s durch 0.0, fügen Sie die beiden Arrays zusammen und ersetzen Sie dann die markierten Indizes oben durch np.NaN .

    
reptilicus 23.08.2012 17:23
quelle
3
%Vor%     
kevin 24.09.2013 12:29
quelle
1

Nicht sicher, wie das funktionieren würde, aber es ist einen Versuch wert:)

%Vor%

Dies führt jedoch nicht zu einem NaN an der letzten Stelle Ihres Arrays. Es ergibt sich eine 0 ...

    
mgilson 23.08.2012 17:12
quelle
1

Ich sehe mehrere einfachere Lösungen:

  • ( EDITED ) Verwenden von np.ma

    %Vor%
  • ( EDITED ) Verwendet nicht np.ma

    %Vor%
Pierre GM 24.08.2012 20:42
quelle