Mar*_*som 9 python random benfords-law
Python有许多方法可以生成不同的随机数分布,请参阅模块的文档random.不幸的是,没有适当的数学背景,它们并不是非常容易理解,特别是考虑到所需的参数.
我想知道这些方法中是否有任何一种能够产生符合Benford定律的分布的随机数,以及哪些参数值是合适的.即对于整数群体,那些整数应该在大约30%的时间以'1'开头,'2'在大约18%的时间开始,等等.
def benfords_range_gen(stop, n):
""" A generator that returns n random integers
between 1 and stop-1 and whose distribution
meets Benford's Law i.e. is logarithmic.
"""
multiplier = math.log(stop)
for i in range(n):
yield int(math.exp(multiplier * random.random()))
>>> from collections import Counter
>>> Counter(str(i)[0] for i in benfords_range_gen(10000, 1000000))
Counter({'1': 300696, '2': 176142, '3': 124577, '4': 96756, '5': 79260, '6': 67413, '7': 58052, '8': 51308, '9': 45796})
Run Code Online (Sandbox Code Playgroud)
Joh*_*rak 20
本福特定律描述了一组数字的第一个数字的分布,如果数字是从对数尺度上的宽范围中选择的.如果你准备一个十年的对数均匀分布,它也会尊重法律.10^[0,1)将产生该分布.
这将产生所需的分布: math.floor(10**random.random())
| 归档时间: |
|
| 查看次数: |
2264 次 |
| 最近记录: |