Python:舍入误差扭曲了均匀分布

标签 python random rounding rounding-error

我需要在 0 和 1 之间采样 10 个均匀分布的随机数。所以我认为 python 中的以下代码可以做到这一点:

positions = []
for dummy_i in range(1000000):
    positions.append(round(random.random(),1))

然而,当将结果放入直方图中时,结果如下所示:

Frequency of numbers rounded to 1 decimal place

因此四舍五入似乎破坏了 random.random() 生成的均匀分布。我想知道是什么原因造成的,以及如何防止这种情况发生。谢谢你的帮助!

最佳答案

看来您的代码后面有问题...(例如,在收集统计信息时)。检查这个较小的片段:

import random, collections
data = collections.defaultdict(int)
for x in range(1000000):
    data[round(random.random(),1)] += 1
print(data)

你会看到 01 当然有大约一半的其他值的样本都非常均匀。

例如我得到:

defaultdict(<class 'int'>,
            {0.4: 100083,
             0.9: 99857,
             0.3: 99892,
             0.8: 99586,
             0.5: 100108,
             1.0: 49874,     # Correctly about half the others
             0.7: 100236,
             0.2: 99847,
             0.1: 100251,
             0.6: 100058,
             0.0: 50208})    # Correctly about half the others

关于Python:舍入误差扭曲了均匀分布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34333594/

相关文章:

c++ - 为蒙特卡罗模拟播种 mt19937_64 的最佳方法

python - 将一列随机数添加到 dask 数据帧的正确方法

python - 如何获得非线性多元回归方程,其中一个变量依赖于python中的其他两个自变量

python - 多列的DataFrame tolist

java - java中的数组,带有随机数

c# - 设计自定义随机类

numbers - 扩大数字

c# - 如何将值 C# 舍入到最接近的整数?

python - 使用 str.format 舍入数字输出

python - Django 如何将 url 映射到基于类的 View 函数?