Существует ли случайное распределение чисел, которое подчиняется закону Бенфорда?

У Python есть несколько способов генерировать различные распределения случайных чисел, см.документация дляrandom модуль, К сожалению, они не очень понятны без соответствующей математической подготовки, особенно с учетом требуемых параметров.

Я хотел бы знать, способен ли какой-либо из этих методов генерировать случайные числа с распределением, которое подчиняетсяЗакон Бенфордаи какие значения параметров являются подходящими. А именно, для целых чисел, эти числа должны начинаться с «1» в 30% случаев, «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})

Ответы на вопрос(2)

Ваш ответ на вопрос