Wie kann ich Nullen ignorieren, wenn ich den Median für Spalten eines Arrays nehme?

8

Ich habe ein einfaches Nummernfeld.

%Vor%

Ich möchte den Median jeder einzelnen Spalte dieses Arrays nehmen.

Allerdings gibt es einige 0 -Werte an verschiedenen Stellen, die ich bei der Berechnung der Mediane ignorieren möchte.

Um das Ganze noch komplizierter zu machen, möchte ich die Spalten mit nur 0 Einträgen so behalten, dass sie den Median von 0 haben. Auf diese Weise würden diese Spalten als ein bisschen Platzhalter dienen, wobei die Dimensionen der Matrix gleich bleiben.

Die numplige Dokumentation hat kein Argument, das für das funktionieren würde, was ich will (vielleicht bin ich verwöhnt von den vielen Schaltern, die wir mit R bekommen!)

numpy.median(a, axis=None, out=None, overwrite_input=False)[source]

Kann jemand bitte etwas Licht auf eine effektive Art und Weise, dies zu tun, die im Einklang mit dem Geist der Nummy? Ich könnte es hacken, aber in diesem Fall habe ich das Gefühl, dass ich den Zweck der Verwendung von numpy an erster Stelle besiegt habe.

Vielen Dank im Voraus.

    
Matt O'Brien 26.02.2014, 17:43
quelle

4 Antworten

6

Verwenden Sie maskierte Arrays und np.ma.median(axis=0).filled(0) , um die Medianwerte der Spalten zu erhalten.

%Vor%     
wflynny 26.02.2014, 18:02
quelle
11

Masked array ist immer praktisch, aber slooooooow:

%Vor%

np.nonzero ist noch schneller:

%Vor%     
CT Zhu 26.02.2014 18:18
quelle
0

Dies kann helfen. Sobald Sie das Array ungleich Null erhalten haben, können Sie den Median direkt von [ungleich Null (a)]

erhalten

numpy.nonzero

numpy.nonzero (a) [Quelle]

%Vor%     
sabbahillel 26.02.2014 17:55
quelle
0

Sie können maskierte Arrays verwenden.

%Vor%     
M4rtini 26.02.2014 17:55
quelle

Tags und Links