Par exemple, j'ai un flux de tableau avec des nombres compris entre 0.0
et 10.0
inclus.Affectez rapidement un tableau à n segments de longueur égale
Je veux affecter les numéros dans arr
à 5
bins de longueur égale rapidement.
Par longueur égale, je veux dire les intervalles de casiers sont [0.0, 2.0), [2.0, 4.0), [4.0, 6.0), [6.0, 8.0), [8.0, 10.0]
.
Le problème est que le dernier intervalle n'est pas le même que les autres intervalles.
Test:
import numpy as np
# Things we know and can pre-calculate
n_bins = 5
minimal = 0.0
maximal = 10.0
reciprocal_bin_length = n_bins/(maximal - minimal)
# Let's say the stream gives 1001 numbers every time.
data = np.arange(1001)/100
norm_data = (data - minimal) * reciprocal_bin_length
norm_data = norm_data.astype(int)
print(norm_data.max())
print(norm_data.min())
Résultat:
5
0
L'indice bin doit être 0, 1, 2, 3 ou 4, mais pas 5.
Je pense que vous cherchez peut-être [numpy.digitize] (https://docs.scipy.org/doc/numpy/reference/generated/numpy.digitize.html). – Marein
min est 0. max est exactement 10 de cette façon. numériser permet d'avoir une longueur inégale et peut être plus lent. c'est une longueur égale. –
qu'en est-il de [pandas.cut] (https://pandas.pydata.org/pandas-docs/stable/generated/pandas.cut.html) – jeremycg