2014-10-21 2 views
2

У меня есть некоторые проблемы, чтобы нарисовать случайное число из гистограммы.рисунок случайного числа из гистограммы

Если я использую гистограмму для представления функции распределения вероятности, как я могу эффективно генерировать 70128 случайных чисел между 0 и 1 из этого распределения, а затем строить их? Мне также нужны случайные числа в списке, затем я могу работать с ними позже.

Мой код гистограмма выглядит следующим образом:

`N = EU_Nodes(load_filename = "linear_gamma=1_B=0_A=0.7.npz") 

def close(a,b): 
    return ((a < (b*1.00001 + 1e-6)) and (a > (b* 0.99999 - 1e-6))) or (a==b) 

def non_zeros(s): 
    v=[] 
    for w in s: 
     if not close(w,0): 
      v.append(w) 
    return v 

x0=-3 
x1=3 
b=np.arange(x0,x1,(x1-x0)/250.) 

u=np.array(N[15].mismatch, dtype=np.float) 
uu=np.array(sum(N[15].load)/70128, dtype=np.float) 
uv=u/uu 

plt.plot(b[0:-1], plt.hist(non_zeros(-uv), bins=b, normed=1, visible=0)[0], color = "k")` 

ответ

0

Вот класс, который принимает гистограмму и значения, которые соответствуют каждой гистограммы ведро. Метод random возвращает случайное значение с тем же распределением, что и гистограмма.

import bisect 
import random 

def accumulate(iterable): 
    ''' Produce an accumulated total of the input; adapted from Python 3 itertools.accumulate 
    ''' 
    it = iter(iterable) 
    total = next(it) 
    yield total 
    for element in it: 
     total += element 
     yield total 

class distrib: 
    def __init__(self, hist, values): 
     total = sum(hist) 
     self.ranges = [accumulate(x/total for x in hist)] 
     self.ranges[-1] = 1.0 # insure against roundoff error 
     self.values = values 
    def random(self): 
     i = bisect.bisect_left(self.ranges, random.random()) 
     return self.values[i] 
+0

Хорошо, но как я могу построить новую гистограмму на основе этих новых случайных значений? –

+0

@SmailKozarcanin помещает их в список и намечает их так же, как и ваши первоначальные значения. –

+0

Я не уверен, что я понимаю код, поэтому я не уверен, как поместить новые значения в список. –

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