在 Python 中绘制 Pareto 分布的 PDF
Plot PDF of Pareto distribution in Python
我有一个具体的Pareto distribution。例如,
Pareto(beta=0.00317985, alpha=0.147365, gamma=1.0283)
这是我从 this answer and now I want to plot a graph of its Probability Density Function (PDF) in matplotlib 获得的。所以我相信x轴都会是正实数,y轴也一样。
如何获取合适的PDF信息并绘制出来? 以编程方式获取数学 PDF 函数或坐标是本题的要求。
更新:
drawPDF
方法 returns 包含 PDF 坐标的图形对象。但是,我不知道如何以编程方式访问这些坐标。我当然不想将对象转换为字符串,也不想使用正则表达式提取信息:
In [45]: pdfg = distribution.drawPDF()
In [46]: pdfg
Out[46]: class=Graph name=pdf as a function of X0 implementation=class=GraphImplementation name=pdf as a function of X0 title= xTitle=X0 yTitle=PDF axes=ON grid=ON legendposition=topright legendFontSize=1
drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X0 PDF data=class=Sample name=Unnamed implementation=class=Sam
pleImplementation name=Unnamed size=129 dimension=2 data=[[-1610.7,0],[-1575.83,0],[-1540.96,0],[-1506.09,0],[-1471.22,0],[-1436.35,0],[-1401.48,0],[-1366.61,0],...,[-1331.7,6.95394e-06],[2852.57,6.85646e-06]] color
=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=2]
我假设您想执行不同的任务:
- 绘制 PDF
- 计算单个点的 PDF
- 计算一系列值的 PDF
这些需求中的每一个都需要不同的脚本。请让我详细说明。
我首先创建 Pareto
分布:
import openturns as ot
import numpy as np
beta = 0.00317985
alpha = 0.147365
gamma = 1.0283
distribution = ot.Pareto(beta, alpha, gamma)
print("distribution", distribution)
要绘制 PDF,请使用 drawPDF()
方法。这将创建一个 ot.Graph
,可以直接在 Jupyter Notebook 或 IPython 中查看。我们可以使用 View
:
强制创建情节
import openturns.viewer as otv
graph = distribution.drawPDF()
otv.View(graph)
这个情节:
要计算单个点的 PDF,请使用 computePDF(x)
,其中 x
是 ot.Point()
。这也可以是 Python list
或 tuple
或 1D numpy array
,因为转换由 OpenTURNS 自动管理:
x = 500.0
y = distribution.computePDF(x)
print("y=", y)
之前的脚本打印:
y= 5.0659235352823877e-05
要计算一系列值的 PDF,我们可以使用 computePDF(x)
,其中 x 是 ot.Sample()
。这也可以是 Python list
列表或 2D numpy array
,因为转换由 OpenTURNS 自动管理。
x = ot.Sample([[v] for v in np.linspace(0.0, 1000.0)])
y = distribution.computePDF(x)
print("y=", y)
之前的脚本打印:
y=
0 : [ 0 ]
1 : [ 0.00210511 ]
[...]
49 : [ 2.28431e-05 ]
我有一个具体的Pareto distribution。例如,
Pareto(beta=0.00317985, alpha=0.147365, gamma=1.0283)
这是我从 this answer and now I want to plot a graph of its Probability Density Function (PDF) in matplotlib 获得的。所以我相信x轴都会是正实数,y轴也一样。
如何获取合适的PDF信息并绘制出来? 以编程方式获取数学 PDF 函数或坐标是本题的要求。
更新:
drawPDF
方法 returns 包含 PDF 坐标的图形对象。但是,我不知道如何以编程方式访问这些坐标。我当然不想将对象转换为字符串,也不想使用正则表达式提取信息:
In [45]: pdfg = distribution.drawPDF()
In [46]: pdfg
Out[46]: class=Graph name=pdf as a function of X0 implementation=class=GraphImplementation name=pdf as a function of X0 title= xTitle=X0 yTitle=PDF axes=ON grid=ON legendposition=topright legendFontSize=1
drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X0 PDF data=class=Sample name=Unnamed implementation=class=Sam
pleImplementation name=Unnamed size=129 dimension=2 data=[[-1610.7,0],[-1575.83,0],[-1540.96,0],[-1506.09,0],[-1471.22,0],[-1436.35,0],[-1401.48,0],[-1366.61,0],...,[-1331.7,6.95394e-06],[2852.57,6.85646e-06]] color
=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=2]
我假设您想执行不同的任务:
- 绘制 PDF
- 计算单个点的 PDF
- 计算一系列值的 PDF
这些需求中的每一个都需要不同的脚本。请让我详细说明。
我首先创建 Pareto
分布:
import openturns as ot
import numpy as np
beta = 0.00317985
alpha = 0.147365
gamma = 1.0283
distribution = ot.Pareto(beta, alpha, gamma)
print("distribution", distribution)
要绘制 PDF,请使用 drawPDF()
方法。这将创建一个 ot.Graph
,可以直接在 Jupyter Notebook 或 IPython 中查看。我们可以使用 View
:
import openturns.viewer as otv
graph = distribution.drawPDF()
otv.View(graph)
这个情节:
要计算单个点的 PDF,请使用 computePDF(x)
,其中 x
是 ot.Point()
。这也可以是 Python list
或 tuple
或 1D numpy array
,因为转换由 OpenTURNS 自动管理:
x = 500.0
y = distribution.computePDF(x)
print("y=", y)
之前的脚本打印:
y= 5.0659235352823877e-05
要计算一系列值的 PDF,我们可以使用 computePDF(x)
,其中 x 是 ot.Sample()
。这也可以是 Python list
列表或 2D numpy array
,因为转换由 OpenTURNS 自动管理。
x = ot.Sample([[v] for v in np.linspace(0.0, 1000.0)])
y = distribution.computePDF(x)
print("y=", y)
之前的脚本打印:
y=
0 : [ 0 ]
1 : [ 0.00210511 ]
[...]
49 : [ 2.28431e-05 ]