Ho una matrice NumPy simili:sostituire zeri in matrice numpy con il valore mediano
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]
voglio sostituire tutti gli zeri con il valore mediano l'intero array (dove i valori zero non sono essere inclusi nel calcolo della mediana)
Finora ho questo succede:
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
esiste un modo intelligente per raggiungere questo obiettivo con la sintassi numpy?
Grazie
Aspetta un minuto ... La mediana dovrebbe essere 26? Quando l'array di elementi diverso da zero viene ordinato (3 5 8 14 15 16 17 18 19 21 26 27 29 29 31 38 38 40 49 55), il valore nel mezzo è 26. – slashdottir
Nevermind, hai ragione. Questa è una buona soluzione – slashdottir
Sì, ci sono 20 elementi diversi da zero. I due al centro sono 21 e 26. La mediana di solito è calcolata come la media dei due nel mezzo per un numero pari di elementi, quindi otteniamo 23,5. Grazie per l'upvote! – bbayles