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?

Était-ce utile?

La solution

Ceci est en fait un comportement documenté de numpy.digitize():

  

Chaque i index retourné est telle que si bins[i-1] <= x < bins[i]   bins augmente de façon monotone, ou si bins[i-1] > x >= bins[i]   bins diminue de façon monotone. Si les valeurs dans x sont au-delà de la   limites de bins, 0 ou len(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])

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top