我想用 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()
输出如下
关于python - 如何用 NumPy 获得累积分布函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10640759/