Создание «нормального распределения», такого как диапазон в NumPy - PullRequest
0 голосов
/ 09 апреля 2019

Я пытаюсь «поместить» массив в ячейки (аналогично гистограмме). У меня есть входной массив input_array и диапазон bins = np.linspace(-200, 200, 200). Общая функция выглядит примерно так:

def bin(arr):
    bins = np.linspace(-100, 100, 200)
    return np.histogram(arr, bins=bins)[0]

Итак,

bin([64, 19, 120, 55, 56, 108, 16, 84, 120, 44, 104, 79, 116, 31, 44, 12, 35, 68])

вернется:

array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0])

Однако я хочу, чтобы мои корзины были более «детализированы», когда я приблизился к 0 ... что-то похожее на нормальное распределение. В результате у меня может быть больше контейнеров (то есть, на коротких диапазонах), когда я близок к 0 и когда я двигаюсь к диапазону, лотки становятся больше. Возможно ли это?

Более конкретно, вместо того, чтобы иметь одинаково широкие ячейки в диапазоне, могу ли я иметь массив диапазонов, где ячейки по направлению к центру меньше, чем к крайним значениям?

Я уже посмотрел ответы типа this и numpy.random.normal , но что-то просто не нажимается вправо.

1 Ответ

1 голос
/ 09 апреля 2019

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

Это преобразование работает, потому что функция обратной ошибки более плоская, чем ноль +/- единицы.

inverse error function

from scipy.special import erfinv
erfinv(np.linspace(-1,1))
# returns: 
array([       -inf, -1.14541135, -0.8853822 , -0.70933273, -0.56893556,
       -0.44805114, -0.3390617 , -0.23761485, -0.14085661, -0.0466774 ,
        0.0466774 ,  0.14085661,  0.23761485,  0.3390617 ,  0.44805114,
        0.56893556,  0.70933273,  0.8853822 ,  1.14541135,         inf])
...