我想在具有负指数(a = -2)的幂律分布中绘制2到15之间的随机变量。我找到了以下内容:
r = scipy.stats.powerlaw.rvs(a, loc = 2, scale = 13, size = 1000)
但它没有采取负数。
任何人都知道出路吗?
答案 0 :(得分:11)
switch (ch) {
case '+':
cout<<"The sum of the two numbers is: "<<num1+num2<<endl;
break;
case '-';
cout<<num2<<" subtracted from "<<num1<<" is "<<num1-num2<<endl;
break;
case '*':
cout<<"When multiplied: "<<num1*num2<<endl;
break;
case '/':
cout<<num1<<" divided by "<<num2<<" will be "<<num1/num2<<endl;
break;
default:
cout<<"Wrong input. Try again.";
}
和Response.AppendHeader("Content-Disposition"," attachment; filename = " + Session["user_id"] + "_makler.pdf");
中定义的幂律分布在数学意义上没有为负numpy.random
定义,如this question的答案中所述:它们不可规范化因为零点处的奇点。所以,遗憾的是,数学说'不'。
您可以使用与scipy.stats
成比例的pdf定义分布,其中a
的间隔不包含零,如果这是您所追求的。
对于x^{g-1}
的{{1}},来自统一变量(g < 0
)的转换是:
pdf(x) = const * x**(g-1)
然后你可以做,例如,
a <= x <= b
等等。
为完整起见,这里是pdf:
np.random.random
这一切都假定为In [3]: def rndm(a, b, g, size=1):
"""Power-law gen for pdf(x)\propto x^{g-1} for a<=x<=b"""
...: r = np.random.random(size=size)
...: ag, bg = a**g, b**g
...: return (ag + (bg - ag)*r)**(1./g)
和In [4]: xx = rndm(1, 2, g=-2, size=10000)
。这些公式应与In [5]: def pdf(x, a, b, g):
ag, bg = a**g, b**g
....: return g * x**(g-1) / (bg - ag)
,a < b
和g != 0
的{{1}}和numpy.power
一致。