Como gerar amostras do tipo Zipf, usando linguagem de script

Como gerar amostras do tipo Zipf, usando linguagem de script

Existe alguma função de linguagem de script (como em pythonou bash) que faça amostras de umdistribuição tipo zipf, para expoente 0<a<=1.

PS: Estou ciente da existência deuma função numpyque pode gerar amostras zipf, mas é apenas para arquivos a >1.

Responder1

Com base nas equações básicas, que tal:

#!/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)

Usa apenas rotinas básicas integradas na linguagem. Pode ser convertido para praticamente qualquer outro idioma, por exemplo perl, ruby. Aqui está uma versão em awk:

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

O awkscript não requer arquivo de entrada, mas exige atribuições de variáveis ​​na linha de comando:

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

Responder2

Não seria um Pythondistribuição expovariada, com o valor correto de lambda, funciona?

informação relacionada