(我对这个问题的解释可能是错误的.如果问题是如何从一个离散的PDF到一个离散的CDF,那么如果样本是等间隔的话,np.cumsum除以一个合适的常数就可以了.如果这个数组是没有等间隔,那么数组的np.cumsum乘以点之间的距离就可以了.)
如果您有一个离散的样本数组,并且您想知道样本的CDF,那么您可以对数组进行排序.如果查看排序结果,您将意识到最小值代表0%,最大值代表100%.如果您想知道分布的50%的值,只需查看排序数组中间的数组元素.
让我们用一个简单的例子仔细研究一下:
import matplotlib.pyplot as plt
import numpy as np
# create some randomly ddistributed data:
data = np.random.randn(10000)
# sort the data:
data_sorted = np.sort(data)
# calculate the proportional values of samples
p = 1. * arange(len(data)) / (len(data) - 1)
# plot the sorted data:
fig = figure()
ax1 = fig.add_subplot(121)
ax1.plot(p, data_sorted)
ax1.set_xlabel('$p$')
ax1.set_ylabel('$x$')
ax2 = fig.add_subplot(122)
ax2.plot(data_sorted, p)
ax2.set_xlabel('$x$')
ax2.set_ylabel('$p$')
这给出了下图,其中右侧图是传统的累积分布函数.它应该反映点数背后的过程的CDF,但自然不是只要点的数量是有限的.
此功能很容易反转,它取决于您需要的应用程序.