Mam numpy tablicy tak:zastąpić zera w numpy tablicy z wartością mediany
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]
Chcę wymienić wszystkie zer z medianą wartości całej tablicy (gdzie wartości zerowej nie są zostać uwzględnione w obliczaniu mediana)
do tej pory to dzieje:
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
jest jakiś sprytny sposób, aby osiągnąć ten cel ze składnią numpy?
Dziękuję
Zaczekaj chwilę ... Mediana powinna wynosić 26? Gdy niezerowa tablica elementów zostanie posortowana (3 5 8 14 15 16 17 18 19 21 26 27 29 29 31 38 38 40 49 55), wartość w środku wynosi 26. – slashdottir
Nieważne, masz rację. To dobre rozwiązanie. – slashdottir
Tak, istnieje 20 elementów niezerowych. Dwa w środku to 21 i 26. Mediana jest zwykle obliczana jako średnia z dwóch środkowych dla parzystej liczby elementów, więc otrzymujemy 23,5. Dzięki za przegraną! – bbayles