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?

È stato utile?

Soluzione

comportamento Questo è in realtà documentata di numpy.digitize():

  

Ogni i indice restituito è tale che, se bins[i-1] <= x < bins[i]   bins è monotonicamente crescente, o se bins[i-1] > x >= bins[i]   bins è monotonicamente decrescente. Se i valori in x sono al di là del   limiti di bins, 0 o len(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])

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top