如何使用腳本語言產生類似 Zipf 的樣本

如何使用腳本語言產生類似 Zipf 的樣本

是否有任何腳本語言函數(如 inpythonbash)從類似 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

不是Python嗎外變數分佈,具有正確的 lambda 值,可以嗎?

相關內容