擅长:python、mysql、java
<p>(有可能我对这个问题的解释是错误的。如果问题是如何从离散PDF获取离散CDF,那么<code>np.cumsum</code>除以适当的常数就可以了,如果样本是等距的。如果数组不是等距的,那么数组的<code>np.cumsum</code>乘以点之间的距离就可以了。)</p>
<p>如果您有一个离散的样本数组,并且您想知道该样本的CDF,那么您可以对该数组进行排序。如果您查看排序结果,您会发现最小值表示0%,最大值表示100%。如果您想知道分布的50%的值,只需查看位于排序数组中间的array元素。</p>
<p>让我们用一个简单的例子来详细了解一下:</p>
<pre><code>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. * np.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$')
</code></pre>
<p>这给出了下面的图,其中右边的图是传统的累积分布函数。它应该反映点后面的过程的CDF,但自然不是只要点的数量是有限的。</p>
<p><img src="https://i.stack.imgur.com/sSjIz.png" alt="cumulative distribution function"/></p>
<p>这个函数很容易反转,这取决于你的申请表你需要。</p>