是否有任何脚本语言函数(如 inpython
或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
不是Python吗外变量分布,具有正确的 lambda 值,可以吗?