Python: как создать гистограмму с одинаковыми по размеру ячейками

У меня есть набор данных, и я хочу сделать из него гистограмму. Мне нужно, чтобы ящики были такими жеразмерЯ имею в виду, что они должны содержать одинаковое количество объектов, а не более общую (numpy.histogram) проблему наличияна равном расстоянии бункера. Естественно, это произойдет за счет ширины ящиков, которая может - и, как правило, будет - отличаться.

Я укажу количество желаемых лотков и набор данных, получив взамен ребра лотков.

Example:
data = numpy.array([1., 1.2, 1.3, 2.0, 2.1, 2.12])
bins_edges = somefunc(data, nbins=3)
print(bins_edges)
>> [1.,1.3,2.1,2.12]

Таким образом, все контейнеры содержат 2 точки, но их ширина (0,3, 0,8, 0,02) различна.

Есть два ограничения: - если группа данных идентична, корзина, содержащая их, может быть больше. - если имеется N данных и запрошено M элементов, будет N / M элементов плюс один, если N% M не равно 0.

Этот кусок кода - какая-то глупостьМы написали, что хорошо работает для небольших наборов данных. Что если я наберу 10 ** 9 + баллов и захочу ускорить процесс?

  1 import numpy as np
  2 
  3 def def_equbin(in_distr, binsize=None, bin_num=None):
  4 
  5     try:
  6 
  7         distr_size = len(in_distr)
  8 
  9         bin_size = distr_size / bin_num
 10         odd_bin_size = distr_size % bin_num
 11 
 12         args = in_distr.argsort()
 13 
 14         hist = np.zeros((bin_num, bin_size))
 15 
 16         for i in range(bin_num):
 17             hist[i, :] = in_distr[args[i * bin_size: (i + 1) * bin_size]]
 18 
 19         if odd_bin_size == 0:
 20             odd_bin = None
 21             bins_limits = np.arange(bin_num) * bin_size
 22             bins_limits = args[bins_limits]
 23             bins_limits = np.concatenate((in_distr[bins_limits],
 24                                           [in_distr[args[-1]]]))
 25         else:
 26             odd_bin = in_distr[args[bin_num * bin_size:]]
 27             bins_limits = np.arange(bin_num + 1) * bin_size
 28             bins_limits = args[bins_limits]
 29             bins_limits = in_distr[bins_limits]
 30             bins_limits = np.concatenate((bins_limits, [in_distr[args[-1]]]))
 31 
 32         return (hist, odd_bin, bins_limits)

Ответы на вопрос(4)

Ваш ответ на вопрос