Python:如何在给定数字数组的情况下绘制cdf函数

Python:如何在给定数字数组的情况下绘制cdf函数,python,Python,我在Windows上工作。我只想输入一个数组,然后得到数组的cdf。这就是你想要的吗? 我提供了一个近似cdf的函数,并绘制了它。 (假设要输入具有y值的pdf数组) 这就是你想要的吗? 我提供了一个近似cdf的函数,并绘制了它。 (假设要输入具有y值的pdf数组) 首先,您可以像这样实现CDF: from bisect import bisect_left class discrete_cdf: def __init__(self, data): self._data

我在Windows上工作。我只想输入一个数组,然后得到数组的cdf。

这就是你想要的吗? 我提供了一个近似cdf的函数,并绘制了它。 (假设要输入具有y值的pdf数组)

这就是你想要的吗? 我提供了一个近似cdf的函数,并绘制了它。 (假设要输入具有y值的pdf数组)


首先,您可以像这样实现CDF:

from bisect import bisect_left

class discrete_cdf:
    def __init__(self, data):
        self._data = data # must be sorted
        self._data_len = float(len(data))

    def __call__(self, point):
        return (len(self._data[:bisect_left(self._data, point)]) /
                self._data_len)
from scipy.stats import norm
import matplotlib.pyplot as plt

cdf = discrete_cdf(your_data)
xvalues = range(0, max(your_data))
yvalues = [cdf(point) for point in xvalues]
plt.plot(xvalues, yvalues)
使用上面的类,可以按如下方式绘制:

from bisect import bisect_left

class discrete_cdf:
    def __init__(self, data):
        self._data = data # must be sorted
        self._data_len = float(len(data))

    def __call__(self, point):
        return (len(self._data[:bisect_left(self._data, point)]) /
                self._data_len)
from scipy.stats import norm
import matplotlib.pyplot as plt

cdf = discrete_cdf(your_data)
xvalues = range(0, max(your_data))
yvalues = [cdf(point) for point in xvalues]
plt.plot(xvalues, yvalues)

编辑:一个
arange
在这里没有意义,对于x和x+1之间的所有点,cdf将始终是相同的。

首先,您可以这样实现cdf:

from bisect import bisect_left

class discrete_cdf:
    def __init__(self, data):
        self._data = data # must be sorted
        self._data_len = float(len(data))

    def __call__(self, point):
        return (len(self._data[:bisect_left(self._data, point)]) /
                self._data_len)
from scipy.stats import norm
import matplotlib.pyplot as plt

cdf = discrete_cdf(your_data)
xvalues = range(0, max(your_data))
yvalues = [cdf(point) for point in xvalues]
plt.plot(xvalues, yvalues)
使用上面的类,可以按如下方式绘制:

from bisect import bisect_left

class discrete_cdf:
    def __init__(self, data):
        self._data = data # must be sorted
        self._data_len = float(len(data))

    def __call__(self, point):
        return (len(self._data[:bisect_left(self._data, point)]) /
                self._data_len)
from scipy.stats import norm
import matplotlib.pyplot as plt

cdf = discrete_cdf(your_data)
xvalues = range(0, max(your_data))
yvalues = [cdf(point) for point in xvalues]
plt.plot(xvalues, yvalues)


编辑:一个
arange
在那里没有意义,在x和x+1之间的所有点的cdf都是相同的。

你有matplotlib和numpy/scipy可用吗?@Bruce:另外,你所说的数组cdf是什么意思?cdf必须根据特定的分布进行计算。@Space\u C0wb0y:假设X包含实验结果,我们可以计算概率。e、 g.X=[1,3,4,5,7,8,10]。P(X<1)=0,P(X@Bruce:那
P呢(X@Space_C0wb0y:4/7,是的,我的数据总是离散的。你有matplotlib和numpy/scipy可用吗?@Bruce:还有,你说的数组的cdf是什么意思?cdf必须根据某个分布计算。@Space_C0wb0y:我们可以假设X包含实验结果来计算概率。例如,X=[1,3,4,5,7,8,10]。P(X<1)=0,P(X@Bruce:那
P呢(X@Space_C0wb0y:4/7,是的,我的数据总是离散的。很好的解决方案。你可以简化
len(self.\u data[:bisect\u left(self.\u data,point)])
bisect\u left(self.\u data,point)
,因为切片已经指定了长度。也许
对分\u right
也会更好,因为CDF用于P(X)的点,你应该记住self也包含在函数调用中,因此当你调用“离散\u CDF(你的数据)”时,你实际上在做“离散\u CDF(self,你的数据)”。因此,最好在函数“def uu init uuu(self,data):“@RaeinHashemi它不仅更好,而且实际上是必需的-所示代码不正确,感谢您指出!类给了我一个语法错误-
返回(len(self.\u data[:bisect_left(self.\u data,point)]之间缺少一些东西)
self.\u data\u len)
在类的最后两行?@ru111是的,那里应该有一个除法(
/
),这在一些编辑中丢失了。谢谢你指出了这一点!很好的解决方案。你可以简化
len(self.\u data[:bisect\u left(self.\u data,point)]
bisect left(self.\u data,point)
,因为切片已经指定了长度。也许
对分\u right
也会更好,因为CDF用于P(X)的点,你应该记住self也包含在函数调用中,因此当你调用“离散\u CDF(你的数据)”时,你实际上在做“离散\u CDF(self,你的数据)”。因此,最好在函数“def uu init uuu(self,data):“@RaeinHashemi它不仅更好,而且实际上是必需的-所示代码不正确,感谢您指出!类给了我一个语法错误-
返回(len(self.\u data[:bisect_left(self.\u data,point)]之间缺少一些东西)
self.\u data\u len)
在课程的最后两行?@ru111是的,那里应该有一个除法(
/
),这在一些编辑中丢失了。感谢您指出这一点!