在 python Scipy 中绘制连续三角形分布

Dun*_*una 4 python numpy scipy

如何从、和x的连续三角形分布中进行绘制并获取特定值的 CDF 。我不明白如何设置参数。我想要得到相当于在 中做的事情。 mode=0lower limit=-1upper limit=1numpyp.random.triangular(left=-1, mode=0, right=1)Scipy

我尝试了以下操作,但我不确定这是否是我所追求的。

scipy.stats.triang.cdf([-1,-0.5,0,0.5,1], c=0.5, loc=-1, scale=2)并获得:array([ 0, 0.125, 0.5, 0.875, 1.])这似乎是正确的。

我不明白为什么

scipy.stats.triang.expect(func=lambda x: x, c = 0.5, loc=0.5, scale=1)

正在产生错误消息

_argcheck() missing 1 required positional argument: 'c'

尽管c提供了论据。

War*_*ser 5

看来您的 CDF 函数参数正确。一般来说,如果您有left,moderight所使用的,您可以将它们转换为使用numpy.random.triangular的参数scipy.stats.triang

c = (mode - left) / (right - left)
loc = left
scale = right - left
Run Code Online (Sandbox Code Playgroud)

该方法的参数expect可能会令人困惑。你尝试过这个:

scipy.stats.triang.expect(func=lambda x: x, c = 0.5, loc=0.5, scale=1)
Run Code Online (Sandbox Code Playgroud)

正确的调用是

In [91]: triang.expect(lambda x: x, (0.5,), loc=0.5, scale=1)
Out[91]: 1.0
Run Code Online (Sandbox Code Playgroud)

第二个参数是一个保存形状参数的元组,在本例中是 tuple (c,)。形状参数没有单独的关键字参数。


要从以 0 为中心、宽度为 2 的三角形分布中抽取样本,请使用、、、 和 的rvs方法。例如,以下抽取 10 个样本:scipy.triangc=0.5loc=-1scale=2

In [96]: triang.rvs(c=0.5, loc=-1, scale=2, size=10)
Out[96]: 
array([-0.61654942,  0.03949263,  0.44191603, -0.76464285, -0.5474533 ,
        0.00343265,  0.222072  , -0.14161595,  0.46505966, -0.23557379])
Run Code Online (Sandbox Code Playgroud)