Python: как выбрать значение из дистрибутива?

#python #distribution

#python #дистрибутив

Вопрос:

Я хотел бы выбрать соответствующее значение из дистрибутива

Мой дистрибутив следует усеченному распределению Леви

 x = [(r   r0)**(-a)] * exp(−r/κ)
  

Функция

 def levy(r0, a, k, r):
    return (r   r0)**(-a)*exp(-r/k)
  

Я хотел бы для заданного случайного числа x найти относительное r .

Например

 r0 = 100  
a = 2
k = 1500

import random
x = random.uniform(0, 1)
### Write a function to find r given x
  

Комментарии:

1. Знаете ли вы, что поиск в O (N) может подразумевать недетерминированное количество шагов? Я рекомендую просто написать обратную математическую функцию.

2. @Atterson проблема в том, чтобы найти обратную такую функцию

3. Абсолютно. Но найдите математика, он напишет это в кратчайшие сроки. mathematica.stackexchange.com

4. Есть ли какая-то причина, по которой вы не можете использовать обратный CDF сбора, найденного в Википедии ?

5. Для чего будет использоваться range r ? [0… бесконечность] ?

Ответ №1:

Вообще говоря, то, что вы хотите, это:

  • напишите кумулятивную функцию, F
  • напишите его обратное значение, F_inv
  • запустите F_inv(x). Это даст вам случайные числа из вашего дистрибутива.

Если вы не можете выполнить первый шаг аналитически (), вы можете, по крайней мере, выполнить его численно с некоторым заданным разрешением, чтобы не застрять с чем-то недетерминированным.