ich eine numpy Array wie diese:ersetzen Nullen in numpy Array mit dem Medianwert
foo_array = [38,26,14,55,31,0,15,8,0,0,0,18,40,27,3,19,0,49,29,21,5,38,29,17,16]
ich alle Nullen mit dem Medianwert des gesamten Arrays ersetzt werden soll (wobei die Null-Werte sind nicht zu bei der Berechnung des Median einbezogen werden)
Bisher habe ich diese los:
foo_array = [38,26,14,55,31,0,15,8,0,0,0,18,40,27,3,19,0,49,29,21,5,38,29,17,16]
foo = np.array(foo_array)
foo = np.sort(foo)
print "foo sorted:",foo
#foo sorted: [ 0 0 0 0 0 3 5 8 14 15 16 17 18 19 21 26 27 29 29 31 38 38 40 49 55]
nonzero_values = foo[0::] > 0
nz_values = foo[nonzero_values]
print "nonzero_values?:",nz_values
#nonzero_values?: [ 3 5 8 14 15 16 17 18 19 21 26 27 29 29 31 38 38 40 49 55]
size = np.size(nz_values)
middle = size/2
print "median is:",nz_values[middle]
#median is: 26
gibt es einen cleveren Weg, dies mit numpy Syntax zu erreichen?
Danke
Warten Sie eine Minute ... Der Median sollte 26 sein? Wenn das Nicht-Null-Element-Array sortiert ist (3 5 8 14 15 16 17 18 19 21 26 27 29 29 31 38 38 40 49 55), ist der Wert in der Mitte 26. – slashdottir
Nevermind, Sie haben Recht. Das ist eine gute Lösung – slashdottir
Yeah, es gibt 20 Nicht-Null-Elemente. Die beiden in der Mitte sind 21 und 26. Der Median wird normalerweise als der Durchschnitt der beiden in der Mitte für eine gerade Anzahl von Elementen berechnet, so dass wir 23,5 erhalten. Danke für die Verbesserung! – bbayles