retourne numpy.digitize valeurs hors de portée?
-
08-10-2019 - |
Question
Je suis en utilisant le code suivant pour numériser un tableau dans 16 bacs:
numpy.digitize(array, bins=numpy.histogram(array, bins=16)[1])
Je pense que la sortie se trouve dans l'intervalle [1, 16], étant donné qu'il y a 16 casiers. Cependant, l'une des valeurs du tableau retourné 17. Comment peut-on expliquer cela?
La solution
Ceci est en fait un comportement documenté de numpy.digitize()
:
Chaque
i
index retourné est telle que sibins[i-1] <= x < bins[i]
bins
augmente de façon monotone, ou sibins[i-1] > x >= bins[i]
bins
diminue de façon monotone. Si les valeurs dansx
sont au-delà de la limites debins
,0
oulen(bins)
est renvoyée, le cas échéant.
Dans votre cas, 0
et 17
sont également des valeurs de retour valides (note que le tableau bin retourné par numpy.histogram()
a 17
de longueur). Les bacs retournés par numpy.histogram()
couvrent la gamme array.min()
à array.max()
. La condition donnée dans la documentation montre que array.min()
appartient au premier bac, alors que réside array.max()
en dehors du dernier bac -. C'est pourquoi 0
est pas dans la sortie, tandis que 17 est
Autres conseils
numpy.histogram()
produit un tableau du bac bords , dont il existe (number of bins)+1
.
Dans la version 1.8 numpy., Vous avez la possibilité de choisir si vous voulez numpy.digitize à considérer l'intervalle fermé ou ouvert. Voici un exemple (copié à partir de http: //docs.scipy. org / doc / numpy / référence / produit / numpy.digitize.html )
x = np.array ([1,2, 10,0, 12,4, 15,5, 20.])
= np.array bacs ([0,5,10,15,20])
np.digitize (x, bacs, droite = True )
array([1, 2, 3, 4, 4])