So generieren Sie Zipf-ähnliche Beispiele mithilfe einer Skriptsprache

So generieren Sie Zipf-ähnliche Beispiele mithilfe einer Skriptsprache

Gibt es eine Skriptsprachenfunktion (wie in pythonoder bash), die Stichproben aus einemZipf-ähnliche Verteilung, für Exponent 0<a<=1.

PS: Ich bin mir der Existenz voneine Numpy-Funktiondas kann Zipf-Beispiele generieren, aber nur für a >1.

Antwort1

Wie wäre es auf Grundlage der Grundgleichungen mit:

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

Verwendet nur eingebaute, grundlegende Routinen in der Sprache. Kann in nahezu jede andere Sprache konvertiert werden, z. B. perl, ruby. Hier ist eine Version in awk:

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

Das awkSkript erfordert keine Eingabedatei, erfordert jedoch Variablenzuweisungen in der Befehlszeile:

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

Antwort2

Wäre ein Python nichtexpovariate Verteilung, mit dem richtigen Lambda-Wert, funktioniert?

verwandte Informationen