Я пишу функцию, которая будет рисовать случайные числа из заданного распределения, такие как Пуассон, Нормальный или Биномиальный.Требуется один аргумент для количества выборок и второй аргумент для типа распределения.Он будет принимать дополнительные параметры в зависимости от выбранного распределения.Так что, если я возьму Нормальные образцы, то это среднее и сд.
Есть ли оптимальный способ написать это?
Мой код
import matplotlib.pyplot as plt
import numpy as np
def randNumberDistribution(samples, distribution,*optional):
if distribution.capitalize() == 'Normal':
if len(optional) == 2:
mean, sd, = optional
s = np.random.normal(mean, sd, samples)
print(s)
count, bins, ignored = plt.hist(s, 20, density=True)
plt.plot(bins, 1/(sigma * np.sqrt(2 * np.pi)) * np.exp( - (bins - mu)**2 / (2 * sigma**2) ),linewidth=3, color='y')
plt.show()
else:
print("Invalid number of arguments")
if distribution.capitalize() == 'Binomial':
if len(optional) == 2:
numOfTrials, probSuccess = optional # number of trials, probability of success(each trial)
s = np.random.binomial(n, p, samples)
count, bins, ignored = plt.hist(s, 14, density=True)
else:
print("Invalid number of arguments")
if distribution.capitalize() == 'Poisson':
if len(optional) == 1:
exp = optional
s = np.random.poisson(exp, samples) #Expectation of interval(should be >= 0)
count, bins, ignored = plt.hist(s, 14, density=True)
else:
print("Invalid number of arguments")
print(randNumberDistribution(5,'Poisson',5))