import numpy as np
import matplotlib.pyplot as plt
from scipy import integrate, optimize
# функция распределения
def distr(x):
return np.exp(-x*10)*(np.cos(np.exp(x*10))+1)
# ее интеграл
s = integrate.quad(distr, 0, 1, limit=1000, full_output=1)[0]
def distr_int(x):
return integrate.quad(distr, 0, x, limit=100, full_output=1)[0] / s
# обратная от интеграла
def inv(x):
return optimize.fsolve(lambda z: distr_int(z) - x, x0=0.5)[0]
x = np.random.rand(10)
# применяем распределение
y = np.vectorize(inv)(x)
aW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKZnJvbSBzY2lweSBpbXBvcnQgaW50ZWdyYXRlLCBvcHRpbWl6ZQoKIyDRhNGD0L3QutGG0LjRjyDRgNCw0YHQv9GA0LXQtNC10LvQtdC90LjRjwpkZWYgZGlzdHIoeCk6CiAgICByZXR1cm4gbnAuZXhwKC14KjEwKSoobnAuY29zKG5wLmV4cCh4KjEwKSkrMSkKIyDQtdC1INC40L3RgtC10LPRgNCw0LsKcyA9IGludGVncmF0ZS5xdWFkKGRpc3RyLCAwLCAxLCBsaW1pdD0xMDAwLCBmdWxsX291dHB1dD0xKVswXQpkZWYgZGlzdHJfaW50KHgpOgogICAgcmV0dXJuIGludGVncmF0ZS5xdWFkKGRpc3RyLCAwLCB4LCBsaW1pdD0xMDAsIGZ1bGxfb3V0cHV0PTEpWzBdIC8gcwojINC+0LHRgNCw0YLQvdCw0Y8g0L7RgiDQuNC90YLQtdCz0YDQsNC70LAKZGVmIGludih4KToKICAgIHJldHVybiBvcHRpbWl6ZS5mc29sdmUobGFtYmRhIHo6IGRpc3RyX2ludCh6KSAtIHgsIHgwPTAuNSlbMF0KCnggPSBucC5yYW5kb20ucmFuZCgxMCkKIyDQv9GA0LjQvNC10L3Rj9C10Lwg0YDQsNGB0L/RgNC10LTQtdC70LXQvdC40LUKeSA9IG5wLnZlY3Rvcml6ZShpbnYpKHgp