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) 我有一个快速的问题.我试图在java中制作欺诈检测应用程序,该应用程序将主要基于本福德定律.本福德的定律非常酷,它基本上可以解释为在真实的金融交易中,第一个数字通常是1,2或3,很少是8,9.我无法得到本福德公式翻译成可以用Java运行的代码.
http://www.mathpages.com/home/kmath302/kmath302.htm此链接提供了有关本福特法律及其使用方式的更多信息.
我知道我必须使用java数学类才能使用自然日志功能,但我不知道该怎么做.任何帮助将不胜感激.
非常感谢!!