Je voudrais comprendre comment fonctionne np.histogram, j'ai donc exécuté le code suivant:

import numpy as np 

a = np.array([[1,2,3,4],[1,2,3,4],[1,5,7,3]])
imhist , bins = np.histogram(a.flatten())

Le problème est que je devrais obtenir un histogramme qui montre [0,3,2,3,2,1,0,1], alors que j'ai [3, 2, 0, 3, 0, 2, 1, 0 , 0, 1]

Qu'est-ce qui ne va pas?

0
Gold 17 mars 2019 à 12:25

2 réponses

Meilleure réponse

Le premier problème est qu'une valeur par défaut pour bins=10 est passée dans l'appel à np.histogram, vous pouvez résoudre ce problème en passant les cases que vous souhaitez:

import numpy as np 

a = np.array([[1,2,3,4],[1,2,3,4],[1,5,7,3]])
imhist , bins = np.histogram(a.flatten(), bins=np.arange(9))

print(imhist, bins)

>>> (array([0, 3, 2, 3, 2, 1, 0, 1], dtype=int32),
     array([0, 1, 2, 3, 4, 5, 6, 7, 8]))

Dans ce cas, les casiers vont de 0 à 8 car vous devez également fournir le bord le plus à droite, donc si votre dernière valeur est 7, le bord le plus à droite sera 8.

0
dzang 17 mars 2019 à 09:36

Np.histogram par défaut a 10 bacs. Les bacs déterminent comment vos données sont regroupées. Dans votre cas, vous avez 12 valeurs de données et 10 bacs, c'est pourquoi vos bacs ne sont pas des entiers et vos données sont ajustées.

Essayez d'utiliser:

np.histogram(a.flatten(), bins=12) 

Au lieu :)

J'espère que ça aide!

0
Rafe H 17 mars 2019 à 09:31