Ну, у меня нет Python 2.7, так что ответ будет для Python 3.6, но он должен работать, в конце концов, это scipy.
По сути, вы должны извлечь scale
и loc
параметры из заданных μ
и σ
.Вот две простые функции для этого, плюс некоторая выборка, чтобы доказать, что мы получаем правильные значения.По сути, первая печатная строка - это то, что вам нужно, а третья строка - результат выборки, она должна быть примерно одинаковой.Вторая строка - scale
и loc
, вычисленные из μ
и σ
.Поиграй с числами, посмотри, как идут дела
import numpy as np
from scipy.stats import maxwell
def get_scale_from_sigma(sigma):
"""Compute scale from sigma based upon http://mathworld.wolfram.com/MaxwellDistribution.html"""
a2 = np.pi*sigma / (3.0*np.pi - 8.0)
return np.sqrt(a2)
def get_loc_from_mu_sigma(mu, sigma):
"""Compute loc from mu/sigma based upon http://mathworld.wolfram.com/MaxwellDistribution.html"""
scale = get_scale_from_sigma(sigma)
loc = mu - 2.0 * scale * np.sqrt(2.0 / np.pi)
return loc
sigma = 1.0
mu = 2.0 * get_scale_from_sigma(sigma) * np.sqrt(2.0 / np.pi) # + 3.0 as shift, for exampl
print(mu, sigma)
scale = get_scale_from_sigma(sigma)
loc = get_loc_from_mu_sigma(mu, sigma)
print(scale, loc)
q = maxwell.rvs(size=10000, scale = scale, loc = loc)
print(np.mean(q), np.std(q))