スクリプト言語を使用して Zipf のようなサンプルを生成する方法

スクリプト言語を使用して Zipf のようなサンプルを生成する方法

pythonまたはのようなスクリプト言語関数でbashzipfのような分布指数の場合は0<a<=1

追伸:私は存在を認識しています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

パイソンなら変量分布、ラムダの値が正しい場合、動作しますか?

関連情報