Как создать образцы с использованием выборки обратного преобразования с заданным настроенным PDF-файлом в Python?

У меня есть PDF-файл:

$$ P(\varepsilon) = \frac{1}{4k} \mathrm{sech}^2 \frac{\varepsilon}{2k}$$

CDF:

$$ CDF(\varepsilon) = \frac{\tanh(\frac{\varepsilon}{2k})}{2} $$

и обратный CDF:

$$ CDF^{-1}(c) = \frac{c}{2\tanh^{-1}(2k_BT)} $$

Теперь, что я должен сделать, чтобы сгенерировать N образцов с моим PDF P (\ varepsilon) заданного k?

Вот что у меня есть до сих пор:

import numpy as np
def sampleConduction(N, kT):

    for i in range(N):
        c = np.random.random()
        list = [c]
        print('list=',list) 
    g = np.column_stack(list)
    print('g=',g)

     d = np.arctanh(2*list)+2*kT

    return d

sampleConduction(3,0.1)

Результат этого кода:

list= [0.7687170402304889]
list= [0.24759083266582882]
list= [0.18334770166799108]
g= [[0.1833477]]

array([0.38544466, 0.38544466]) # d

Я хотел объединить 3 списка в один, но мне не удалось использовать np.column_stack(). Что мне попробовать дальше?

Большое спасибо!


person g_tenga    schedule 15.09.2018    source источник
comment
Два комментария, не связанные с фактическим вопросом, который вы задаете: (1) Ваша формула для обратного CDF выглядит неправильно. В формуле должно быть *, а не +. (2) Выражение tanh^{-1}(x) не является 1/tanh(x). tanh^{-1} — это функция, обратная гиперболическому тангенсу. В numpy эта функция называется numpy.arctanh.   -  person Warren Weckesser    schedule 16.09.2018
comment
@WarrenWeckesser Спасибо! Я исправил свою математическую ошибку.   -  person g_tenga    schedule 16.09.2018
comment
Подкласс scipy.stats.rv_continuous может быть вариантом. См., например. здесь для отправной точки. Этот класс может генерировать образцы, если ему предоставлен только pdf, но я подозреваю, что он будет работать лучше, если вы также предоставите cdf или, что еще лучше, обратный cdf.   -  person Paul Panzer    schedule 16.09.2018
comment
К вашему сведению: ваш дистрибутив известен как логистический дистрибутив. Он реализован в scipy как scipy.stats.logistic< /а>.   -  person Warren Weckesser    schedule 16.09.2018
comment
@WarrenWeckesser Спасибо! numpy.random.logistic — это действительно то, что я искал. Думаю, я усложнил эту задачу.   -  person g_tenga    schedule 16.09.2018