Распределение плотности по частоте 1D-массива – 2 разных попытки

У меня есть большой массив элементов, которые я называю RelDist (в котором размерно, является единицей расстояния) в моделируемой громкости. Я пытаюсь определить распределение для «количества значений на единицу объема», которое также является плотностью числа. Он должен быть похож на эту диаграмму:

Я знаю, что ось масштабируется в базе данных 10, график набора должен обязательно уходить. введите описание изображения здесь

Математически я устанавливал его как два эквивалентных уравнения:

введите описание изображения здесь

где N – количество элементов в массиве, которые дифференцируются относительно естественного логарифма расстояний. Он также может быть эквивалентно переписан в виде регулярной производной путем введения другого фактора r.

Эквивалентное

введите описание изображения здесь

Поэтому для увеличения r я хочу подсчитать изменение N элементов на логарифмический бит r.

На данный момент у меня возникли проблемы с настройкой подсчета частоты на гистограмме при одновременном размещении объема вдоль его стороны.


Попытка 1

Это использует уравнения dN / dlnr / volume

 def n(dist, numbins): logdist= np.log(dist) hist, r_array = np.histogram(logdist, numbins) dlogR = r_array[1]-r_array[0] x_array = r_array[1:] - dlogR/2 ## I am condifent the above part of this code is correct. ## The succeeding portion does not work. dR = r_array[1:] - r_array[0:numbins] dN_dlogR = hist * x_array/dR volume = 4*np.pi*dist*dist*dist ## The included volume is incorrect return [x_array, dN_dlogR/volume] 

Построение этого рисунка даже не показывает распределение, подобное первому сюжету, который я опубликовал выше, и он работает только тогда, когда я выбираю номер ячейки в той же форме, что и мой входной массив. Номер булочки должен быть произвольным, не так ли?


Попытка 2

Это использует эквивалентное уравнение dN / dr / volume.

 numbins = np.linspace(min(RelDist),max(RelDist), 100) hist, r_array = np.histogram(RelDist, numbins) volume = 4*np.float(1000**2) dR = r_array[1]-r_array[0] x_array = r_array[1:] - dR/2 y = hist/dR 

Немного легче, но без включения термина объема я получаю своего рода распределение гистограммы, которое, по крайней мере, является началом.

С этой попыткой, как бы включить термин объема с массивом?

пример

Начните с расстояния значение R примерно 10, подсчитывает изменение числа по отношению к R, затем увеличивая до значения расстояния R 20, учитывает изменение, увеличивается до значения 30, подсчитывает изменение и так далее ,


Вот файл txt моего массива, если вы заинтересованы в его воссоздании

https://www.dropbox.com/s/g40gp88k2p6pp6y/RelDist.txt?dl=0

One Solution collect form web for “Распределение плотности по частоте 1D-массива – 2 разных попытки”

Поскольку никто не смог ответить, я дам результат, если кто-то захочет использовать его для будущего использования:

 def n_ln(dist, numbins): log_dist = np.log10(dist) bins = np.linspace(min(log_dist),max(log_dist), numbins) hist, r_array = np.histogram(log_dist, bins) dR = r_array[1]-r_array[0] x_array = r_array[1:] - dR/2 volume = [4.*np.pi*i**3. for i in 10**x_array[:] ] return [10**x_array, hist/dR/volume] 
Python - лучший язык программирования в мире.