【发布时间】:2018-10-16 10:10:37
【问题描述】:
我正在编写一个函数,该函数将从给定分布(如泊松、正态或二项式)中抽取随机数。它采用一个参数表示样本数量,第二个参数表示分布类型。它将接受基于所选分布的附加参数。所以如果我取 Normal 样本,那么它的平均值和标准差。
有没有最佳的写法?
我的代码
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))
【问题讨论】:
-
只是出于好奇,当你在 print 中调用你的函数时,你会得到一个错误吗?因为,按原样,它没有返回任何东西,实际上是在你的一些 if 和 else 块中打印东西
-
@BilalSaleem 不,当我在 print 中调用我的函数时没有收到错误
-
@BilalSaleem 如果函数没有显式返回任何内容,那么它将返回
None,因此在打印中调用函数时不会出错
标签: python numpy matplotlib optional-parameters normal-distribution