python - 如何用 NumPy 获得累积分布函数?

标签 python numpy histogram

我想用 NumPy 创建一个 CDF,我的代码如下:

histo = np.zeros(4096, dtype = np.int32)
for x in range(0, width):
   for y in range(0, height):
      histo[data[x][y]] += 1
      q = 0 
   cdf = list()
   for i in histo:
      q = q + i
      cdf.append(q)

我在阵列旁行走,但程序执行需要很长时间。有这个功能的内置函数,不是吗?

最佳答案

使用直方图是一种解决方案,但它涉及对数据进行分箱。这对于绘制经验数据的 CDF 不是必需的。让 F(x) 是有多少条目小于 x 的计数,然后它会增加 1,这正是我们看到的测量值。因此,如果我们对样本进行排序,那么在每一点我们将计数增加 1(或分数增加 1/N)并将一个与另一个进行对比,我们将看到“精确的”(即未分箱的)经验 CDF。

以下代码示例演示了该方法

import numpy as np
import matplotlib.pyplot as plt

N = 100
Z = np.random.normal(size = N)
# method 1
H,X1 = np.histogram( Z, bins = 10, normed = True )
dx = X1[1] - X1[0]
F1 = np.cumsum(H)*dx
#method 2
X2 = np.sort(Z)
F2 = np.array(range(N))/float(N)

plt.plot(X1[1:], F1)
plt.plot(X2, F2)
plt.show()

输出如下

enter image description here

关于python - 如何用 NumPy 获得累积分布函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10640759/

相关文章:

python - 如何将 unicode 添加到 python 标题?

python - SciPy SVD 与 Numpy SVD

python - 在 numpy (Python) 中相当于 Matlab 'ismember'?

c++ - 在 OPENGL 中计算直方图

python - Django Rest Framework 在本地主机的 PATCHing 中工作正常,但在同源环境中失败

python - 获取 Pandas 中不包括标题的数据框行

python - 当这段代码像这样调用 FUSE 时会发生什么?

python - 如何有效地从稀疏矩阵中删除列?

python - 如何在Python中绘制从最大范围到最小范围的图

R 直方图和箱线图对齐