如何用Python实现random库随机性测试的批量统计需求?
测试Python random库伪随机性的实现方案
一、完整代码实现
基于你已有的代码,补充循环逻辑即可完成需求,完整代码如下:
import random as rd import statistics as st # 初始化存储统计结果的列表 means = [] medians = [] stdevs = [] # 重复10000次统计操作 for _ in range(10000): # 生成10000个1到10000的随机整数 numbers = [rd.randint(1, 10000) for _ in range(10000)] # 计算并存储单次统计结果 means.append(st.mean(numbers)) medians.append(st.median(numbers)) stdevs.append(st.stdev(numbers)) # 对三个统计结果列表再做统计分析 print("均值列表的统计:") print(f"均值: {st.mean(means)}, 中位数: {st.median(means)}, 标准差: {st.stdev(means)}") print("\n中位数列表的统计:") print(f"均值: {st.mean(medians)}, 中位数: {st.median(medians)}, 标准差: {st.stdev(medians)}") print("\n标准差列表的统计:") print(f"均值: {st.mean(stdevs)}, 中位数: {st.median(stdevs)}, 标准差: {st.stdev(stdevs)}")
二、代码可行性说明
这个方案在代码层面完全可行:
- 逻辑清晰,每一步严格对应需求,无语法错误;
- 量级上,10000次循环每次生成10000个数,Python的内存和计算能力完全能承载,运行时间大概几秒到十几秒(取决于机器性能);
statistics库是Python标准库实现,稳定可靠,适合新手快速上手。
三、更高效的随机性测试方法
如果想提升效率或者做更专业的随机性测试,可以试试这些方向:
1. 用numpy替代纯Python实现
numpy的向量化运算比Python列表循环效率高很多,能大幅缩短运行时间,示例代码:
import numpy as np means = [] medians = [] stdevs = [] for _ in range(10000): # numpy生成随机整数数组 numbers = np.random.randint(1, 10001, size=10000) means.append(np.mean(numbers)) medians.append(np.median(numbers)) stdevs.append(np.std(numbers, ddof=1)) # ddof=1对应样本标准差,和statistics.stdev逻辑一致 # 最终统计 print("均值列表统计:", np.mean(means), np.median(means), np.std(means, ddof=1)) print("中位数列表统计:", np.mean(medians), np.median(medians), np.std(medians, ddof=1)) print("标准差列表统计:", np.mean(stdevs), np.median(stdevs), np.std(stdevs, ddof=1))
2. 专业统计检验方法
伪随机性测试不止看均值、中位数这类描述统计,还可以用统计检验验证是否符合均匀分布:
- 卡方拟合优度检验:检验随机数在各个区间的频数是否符合均匀分布;
- Kolmogorov-Smirnov检验:对比生成数据的累积分布函数和理论均匀分布的差异;
- 可以用
scipy.stats库实现这些检验,示例:
from scipy import stats numbers = np.random.randint(1, 10001, size=10000) # 卡方检验 chi2, p_value = stats.chisquare(np.histogram(numbers, bins=10)[0]) print(f"卡方检验p值:{p_value}") # p值>0.05则无法拒绝均匀分布假设 # KS检验,对比[1,10000]的均匀分布 ks_stat, p_value = stats.kstest(numbers, 'uniform', args=(1, 10000)) print(f"KS检验p值:{p_value}")
3. 标准伪随机数测试套件
比如Diehard测试集、NIST SP 800-22测试套件,这些是行业标准的随机性测试方法,能从频率、序列相关性、游程等多个维度验证伪随机数生成器的质量,不过需要专门的工具或库支持。
内容的提问来源于stack exchange,提问作者Tudor
相关产品推荐
相关产品推荐

