2014-11-30 2 views
0

Я хотел бы получить значения из однородного распределения, которое наклонено вместо стандартного равномерного распределения, которое выдает значения из прямой плоской линии наклона = 0. Чтобы быть более конкретным, я бы хотел для получения значений из функции распределения наклона, РИСУНОК 2 НИЖЕ. Я знаю, что для первого, я мог бы использовать numpy.random.uniform (начальный, окончательный). Как я могу сделать это для наклонного распространения? Я знаю, что умножение «наклона» или коэффициента масштабирования на значения из numpy.random.uniform не математически означает, что значения вытягиваются из наклонного распределения. Я понимаю, что это могло бы иметь какое-то отношение к изменению способа взвешивания каждого выведенного значения. источник: http://www.itl.nist.gov/div898/handbook/eda/section3/eda3662.htm Пожалуйста, помогите! standard uniform distribution plotНаклонное равномерное распределение python

enter image description here

+3

Вы искажая эти графики. Они имеют одинаковое равномерное распределение. Последний график - это просто кумулятивная функция распределения однородного распределения, которая является интегралом функции распределения вероятности. –

+1

@ RobertKern верен. Нет такого понятия, как наклонное равномерное распределение. Существуют треугольные распределения (которые immerrr дал ответ для) и трапециевидные распределения, является одним из тех, что вы хотите? – pjs

ответ

0

Вы могли бы попробовать создать свой собственный PDF с stats.rv_continuous.

Here это ответ, который может вам помочь.

Некоторый код:

import numpy as np 
import matplotlib 
import matplotlib.pyplot as plt 
import scipy.stats 

class linear(scipy.stats.rv_continuous): 
    def _cdf(self, x): 
     return x**2 

distrib = linear(a=0, b=1.0) 
d = distrib.rvs(size=10000) 

fig, ax = plt.subplots(1, 1) 
ax.hist(d, normed=True, histtype='stepfilled', alpha=0.2, bins=100) 
plt.show() 

Гистограмма случайных выборок распределения:

enter image description here

+0

Я не худею, это работает, я получаю следующее: >>> print your_random_values ​​ [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] –

+0

Я проверю его позже и получаю назад к вам. – orange

+0

Извините, я процитировал дискретную версию, вы посмотрите на 'stats.rv_continuous'. – orange

1

Вы можете использовать inverse transform sampling для этой проблемы.

Посмотрим на простое распределение склонов, которое будет генерировать [0; 1] числа s.t. f(0) = 0 и f(1) = 2, 2 происходит от нормализации F(x), то есть F(1) = P(x <= 1) = 1 по определению вероятности.

maths

Согласно обратному преобразованию метод выборки, чтобы получить случайную величину необходимого распределения вам необходимо подключить равномерно распределенную случайную величину вместо Y в последнее уравнение. Давайте проверим, что:

In [61]: y = np.random.rand(10000) 

In [62]: x = np.sqrt(y) 

In [63]: plt.hist(x, bins=100) 

enter image description here

Смежные вопросы