Генерация случайных чисел из произвольной функции плотности вероятностиPython

Программы на Python
Ответить Пред. темаСлед. тема
Гость
 Генерация случайных чисел из произвольной функции плотности вероятности

Сообщение Гость »

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

Изображение


Моя интуиция подсказывает, что один из способов сделать это — выбрать кривую и затем используйте области этих прямоугольников для подачи в np.random.choice, чтобы выбрать диапазон для выполнения обычного случайного действия в диапазоне диапазона этого прямоугольника.

Изображение

Это не так Мне кажется, это очень эффективный способ сделать это. Есть ли более «правильный» способ сделать это?

У меня была возможность это сделать:

Код: Выделить всё

import matplotlib.pyplot as plt
import numpy as np

areas = [4.397498, 4.417111, 4.538467, 4.735034, 4.990129, 5.292455, 5.633938,
6.008574, 6.41175, 5.888393, 2.861898, 2.347887, 2.459234, 2.494357,
2.502986, 2.511614, 2.520243, 2.528872, 2.537501, 2.546129, 7.223747,
7.223747, 2.448148, 1.978746, 1.750221, 1.659351, 1.669999]
divisons = [0.0, 0.037037, 0.074074, 0.111111, 0.148148, 0.185185, 0.222222,
0.259259, 0.296296, 0.333333, 0.37037, 0.407407, 0.444444, 0.481481,
0.518519, 0.555556, 0.592593, 0.62963, 0.666667, 0.703704, 0.740741,
0.777778, 0.814815, 0.851852, 0.888889, 0.925926, 0.962963, 1.0]
weights = [a/sum(areas) for a in areas]
indexes = np.random.choice(range(len(areas)), 50000, p=weights)
samples = []
for i in indexes:
samples.append(np.random.uniform(divisons[i], divisons[i+1]))

binwidth = 0.02
binSize = np.arange(min(samples), max(samples) + binwidth, binwidth)
plt.hist(samples, bins=binSize)
plt.xlim(xmax=1)
plt.show()
Изображение


Метод вроде работает, но немного тяжеловат!

Подробнее здесь: https://stackoverflow.com/questions/416 ... y-function
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»