numpy.digitize restituisce valori fuori range?
-
08-10-2019 - |
Domanda
Sto usando il seguente codice per digitalizzare una serie in 16 bidoni:
numpy.digitize(array, bins=numpy.histogram(array, bins=16)[1])
mi aspetto che l'uscita è nel range [1, 16], dal momento che ci sono 16 bidoni. Tuttavia, uno dei valori nella matrice restituita è 17. Come può essere spiegato?
Soluzione
comportamento Questo è in realtà documentata di numpy.digitize()
:
Ogni
i
indice restituito è tale che, sebins[i-1] <= x < bins[i]
bins
è monotonicamente crescente, o sebins[i-1] > x >= bins[i]
bins
è monotonicamente decrescente. Se i valori inx
sono al di là del limiti dibins
,0
olen(bins)
viene restituito a seconda dei casi.
Quindi nel tuo caso, 0
e 17
sono anche i valori di ritorno validi (si noti che la matrice restituita da bin numpy.histogram()
ha lunghezza 17
). I bidoni restituiti dal numpy.histogram()
coprono la gamma array.min()
a array.max()
. La condizione indicata nella documentazione mostra che array.min()
appartiene al primo scomparto, mentre si trova fuori array.max()
l'ultimo bin -. Ecco perché 0
non è nell'output, mentre 17 è
Altri suggerimenti
numpy.histogram()
produce una matrice di bidone bordi , di cui ci sono (number of bins)+1
.
In NumPy versione 1.8., Si ha la possibilità di scegliere se si desidera numpy.digitize di prendere in considerazione l'intervallo per essere chiuso o aperto. Di seguito è un esempio (copiato da http: //docs.scipy. org / doc / NumPy / riferimento / generata / numpy.digitize.html )
x = np.array ([1.2, 10.0, 12.4, 15.5, 20.])
bidoni = np.array ([0,5,10,15,20])
np.digitize (x, bidoni, destra = True )
array ([1, 2, 3, 4, 4])