Skip to main content
 首页 » 编程设计

python之使用相同的容器在 Python 中获取可变大小的 numpy 数组的 CDF

2025年05月04日12think

我想为几个 numpy 数组(每个数组的长度不同)制作一组可比较的经验 CDF,并将它们存储在 pandas 数据框中:

a = scipy.randn(100) 
b = scipy.randn(500) 
# ECDF from statmodels 
cdf_a = ECDF(a) 
cdf_b = ECDF(b) 

问题是 cdf_a.x, cdf_a.y 与 cdf_b.x, cdf_b.y 的长度不同,我希望它们相同长度,即使用相同数量的箱子来计算 CDF,以便可以从 pandas DataFrame 以相同的比例绘制这些箱子。这是不可能的:

df = pandas.DataFrame({"cdf_a": cdf_a.y, "cdf_b": cdf_b.y}) 

因为cdfs的长度不一样。在计算它们的 CDF 时,如何使用相似的分箱对 a 和 b 进行分箱,以便获得可比较的相同长度向量?

这是最好的解决方案吗?

bins = np.linspace(0, 1, 10) 
v1 = cdf_a(bins) 
v2 = cdf_b(bins) 

请您参考如下方法:

我们在一些拟合优度测试中使用它的方法是堆叠数组,因此它们在所有点上定义,来自两个数组的点。

然后使用 np.searchsorted 得到排名,数据集 1 中低于 x 的点数和数据集 2 中低于 x 的点数。

如果我没记错的话,看看scipy.stats.ks_2samp

data1 = np.sort(data1) 
data2 = np.sort(data2) 
data_all = np.concatenate([data1,data2]) 
cdf1 = np.searchsorted(data1,data_all,side='right')/(1.0*n1) 
cdf2 = (np.searchsorted(data2,data_all,side='right'))/(1.0*n2)