Я хочу, чтобы генерировать гамма-распределенные случайные величины с scipy.stats.gamma.rvsфункции Оберточной использовать различные paremetres в Python
Тем не менее, по API принимает форму и масштабный параметр в качестве входных данных, и я хочу использовать среднее значение и стандартное отклонение в качестве входных данных.
Я мог бы написать обертку, которая будет получать среднее значение и std в качестве входных данных, вычисленный масштаб и форму, а не использовать gamma.rvs для генерации случайной переменной. Но я ожидаю много вызовов этой функции, поэтому я предпочел бы, если бы мне не приходилось делать вычисления каждый раз.
я придумал следующее решение:
from scipy.stats import gamma
def gamma_rvs_generator(mu, sigma):
var = sigma ** 2
scale = var/mu
a = mu/scale
return lambda: gamma.rvs(a=a, scale=scale)
if __name__ == '__main__':
gen = gamma_rvs_generator(10, 10)
print(gen())
, который работает точно так же, как я хочу, чтобы работать. Но я хотел спросить, были ли какие-нибудь лучшие/более питонические решения.
альтернативный способ редактирования API, но это не так. Кстати, почему вы используете 'lambda'? – magicleon
@magicleon Это делает его функцией с аргументами '0', которые можно многократно вызывать, производя разные случайные числа каждый раз. Без «лямбды» он возвратил бы одно случайное число и, следовательно, потребовал, чтобы обертка была повторена с каждым новым случайным числом. –
о, как конструктор? Ницца! – magicleon