[n, mapx] = histc (x, bin_edged)
de Matlab renvoie les décomptes de x dans chaque casier sous la forme n
et renvoie une carte, qui est de la même longueur de x
qui est l'index bin dans lequel chaque élément de x
a été placé.
Je peux faire la même chose dans Julia comme suit:
Using StatsBase x = rand(1000) bin_e = 0:0.1:1 h = fit(Histogram, x, bin_e) yx = map((z) -> findnext(z.<=h.edges[1],1),x) .- 1
Est-ce la "bonne façon" de procéder? Cela semble un peu brouillon.
3 Réponses :
Inspiré par cette question python a> vous devriez pouvoir définir une petite fonction qui délivre le mappage souhaité (conventions modulo): Notez que les bords du bac sont triés et que nous pouvons utiliser Bien que conceptuellement identique à votre solution, cette approche est environ 13 fois plus rapide sur ma machine. J'ai déposé un problème sur Page github de StatsBase.jl suggérant de l'ajouter en tant que fonctionnalité. binindices(edges, data) = searchsortedlast.(Ref(edges), data)
seachsortedlast code > pour obtenir le dernier bord du bac plus petit ou égal à un point de données. En diffusant ceci sur toutes les données, nous obtenons la cartographie. Notez que le
Ref (bords)
indique que bords
est un scalaire sous diffusion (cela signifie que le tableau complet est pris en compte dans chaque appel).
Je me rends compte que nos deux réponses sont incomplètes, car la carte réelle dépend du fait que l'histogramme est fermé à gauche ou à droite (lorsque les éléments de données sont exactement des bords == bin.
Après avoir parcouru le code de Histogram.jl, j'ai trouvé qu'ils incluaient déjà une fonction binindex
. Cette solution est donc probablement la meilleure:
x = 0:0.001:10 h1 = fit(Histogram,x,0:10,closed=left) xmap1 = StatsBase.binindex.(Ref(h1), x) h2 = fit(Histogram,x,0:10,closed=right) xmap2 = StatsBase.binindex.(Ref(h2), x)
Je suis tombé sur cette question lorsque j'essayais de déterminer le nombre d'occurrences de chaque valeur que j'avais dans une liste de valeurs. Si chaque valeur est dans son propre bac (comme pour les données catégorielles, ou les données entières avec un petit nombre de valeurs uniques), c'est ce que l'on tracerait dans un histogramme.
Si c'est ce que vous voulez, alors countmap ()
dans le package StatBase est exactement ce dont vous avez besoin.