Генерация данных на основе экспоненциального распределения - PullRequest
1 голос
/ 30 октября 2019

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

Я столкнулся с from scipy.stats import expon, но я не уверен, как использовать пакет в моем сценарии.

Может кто-нибудь помочь.

Возможный вывод будет выглядеть как [300, 1000, 1500, 1800, 1900, ...].

1 Ответ

0 голосов
/ 30 октября 2019

Сначала вам нужно сгенерировать 30 случайных x значений (равномерно). Тогда вы получите log(x). В идеале log(x) должно быть в диапазоне [50, 5000). Однако в таком случае вам понадобится e^50 <= x <= e^5000 (переполнение !!). Возможное решение состоит в том, чтобы генерировать случайные значения x в [min_x, max_x), получать логарифмические значения и затем масштабировать их до желаемого диапазона [50, 5000).

import numpy as np

min_y = 50
max_y = 5000
min_x = 1
# any number max_x can be chosen
# this number controls the shape of the logarithm, therefore the final distribution
max_x = 10

# generate (uniformly) and sort 30 random float x in [min_x, max_x)
x = np.sort(np.random.uniform(min_x, max_x, 30))
# get log(x), i.e. values in [log(min_x), log(max_x))
log_x = np.log(x)
# scale log(x) to the new range [min_y, max_y)
y = (max_y - min_y) * ((log_x - np.log(min_x)) / (np.log(max_x) - np.log(min_x))) + min_y
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...