它有多随机?

Python语言包括许多标准库,提供对有用函数的访问。例如,要执行涉及标准数学函数(如平方根函数或各种三角函数)的数学计算,我们将导入math模块:

导入数学x = math.sqrt(2)

另一个方便的模块是random模块,它提供了生成伪随机数序列的函数。其中一个这样的函数是random.randint(a,b),它返回一个范围为[a,b]的随机整数n。在这个赋值中,我们将使用这个函数生成一个看似随机的整数列表,其范围为[1,10]。然后,我们将赢博体育一些简单的统计检验来确定数字列表在区间[1,10]中呈现随机和均匀分布的程度。

首先,让我们生成一个包含10,000个随机整数的列表,范围为[1,10]:

Import random list = [random.randint(1,10) for n in range(10000)]

统计测试

我们可以对整数列表执行一些简单的统计测试,以确定列表是否是随机和均匀分布的。在每种情况下,如果列表是真正随机且均匀分布的,我们都可以对测试返回的值做出理论预测。然后,我们可以将每种情况下的理论预测与实际结果进行比较。

要执行下面的单个统计测试,您将构造一个函数来计算每个统计信息。在为每个函数构造代码之后,编写一些调用该函数来执行测试的代码,然后打印测试结果。

频率计数

第一个测试是收集频率计数。对于1到10范围内的每个数字,我们可以计算该数字在列表中出现的次数。如果列表中的数字接近均匀分布,那么范围内的每个数字应该出现大约10000/10 = 1000次。

为了验证这个假设,构造一个函数frequents (list),它构造并返回一个长度为10的列表。列表中的第n项应该是数字n+1在给定列表中出现的次数。

在测试程序中调用此函数并打印结果频率列表。频率应该大致相似,每个频率都应该大约等于1000。

均值和标准差

理论上,由[1,10]范围内均匀分布的离散分布生成的整数列表的均值应为(10+1)/2 = 5.5,标准差应为

(有关这两个预测的推导,请参阅本页。)

均值为μ的数列xi的标准差

构造两个函数,mean(list)和stddev(list),它们可以计算这两个数量,然后在随机整数列表上调用它们。打印结果:它们与上面给出的理论预测有多接近?

相关测试

如果列表中的数字确实是随机的,那么序列中的每个数字都应该与列表中紧随其后的数字不相关。为了验证这个假设,我们可以构造一个包含9999个元组的列表,其中元组n由原始列表中的数字n和n+1组成。然后可以为列表中的元组计算相关系数。

对序列(X,Y)的相关系数由式给出

我们可以通过注意到每个元组中第一个和第二个数字的均值和标准差将近似等于原始整数列表的均值和标准差来简化这个表达式,所以它简化为

其中N是元组列表中元组的个数。

构造一个函数correlation(list,mean,stddev),它可以计算元组列表的相关系数。调用这个函数并输出结果。如果配对列表真的是随机的,那么它与0的相关性有多接近?

到期日期

这份作业要在10月3日星期二上课前交