Как генерировать образцы, подобные Zipf, с помощью скриптового языка

Как генерировать образцы, подобные Zipf, с помощью скриптового языка

Есть ли какая-либо функция скриптового языка (например, pythonили bash), которая делает выборку изzipf-подобное распределение, для показателя степени 0<a<=1.

PS: Я знаю о существованиифункция numpyкоторый может генерировать образцы zipf, но он предназначен только для a >1.

решение1

Исходя из основных уравнений, как насчет:

#!/usr/bin/python
import sys
k = float(sys.argv[1])
s = float(sys.argv[2])
N = int(sys.argv[3])
def zipf(k, s, N):
    return (1/k**s) / sum(1/n**s for n in range(1, N+1))
print zipf(k, s, N)

Использует только встроенные, базовые процедуры в языке. Может быть преобразован в любой другой язык, например perl, ruby. Вот версия на awk:

#!/bin/awk -f
BEGIN {
    for (n=1; n<=N; n++) {
        den=den+1/n^s;
    }
    print (1/(k^s))/den;
}

Скрипт awkне требует входного файла, но требует назначения переменных в командной строке:

$ /tmp/zipf.awk -vk=10 -vs=4 -vN=10
9.24183e-05

решение2

Разве питон неэксповариантное распределение, с правильным значением лямбда, работает?

Связанный контент