在Python中为每个bin分箱数据和计算MAE

问题描述 投票:0回答:1

我有两个数组:

Obs=([])
abs_error=([])

我想用Obs来定义箱子。例如,Where Obs为1到2,bin abs_error为bin#1。然后在Obs为2到3的地方,将bin abs_error bin到bin#2中。等等

一旦我有了binned abs_error(由Obs分类),我想计算每个bin的平均值,然后绘制y轴上每个bin的平均值与x轴上的bin的平均值。

我如何通过Obs定义的bin来分类abs_error?一旦完成,我该如何计算每个垃圾箱的平均值?

现在我有:

abs_error=np.array([2.214033842086792 2.65031099319458 2.021354913711548 ... 2.831442356109619 1.9227538108825684 0.19358205795288086])
obs=np.array([3.3399999141693115 1.440000057220459 1.2799999713897705 ... 5.78000020980835 6.050000190734863 7.75])
bin_boundaries=np.array([0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0,17.0,18.0,19.0,20.0])

idx = np.digitize(obs, bin_boundaries)
mn_ = np.bincount(idx,abs_error) / np.bincount(idx)
print mn

[83.09254473  3.18577858  2.82887524  2.78532805  2.43264693  1.96835116 1.77645996  1.66138196  1.5972414   1.57512014  1.53094066  1.7965252 1.98050336  2.29916244  3.06640482  4.66769505  3.16787195]

我无法打印整个阵列,因为它们非常大。

python numpy scipy statistics binning
1个回答
1
投票

如果您的垃圾箱大小相同,您可以使用楼层划分从Obs获取垃圾箱索引,在您的示例中。

idx = (Obs // 1).astype(int)

如果不使用np.digitize而不是。

idx = np.digitize(Obs, bin_boundaries)

一旦你有索引使用它们与np.bincount获得手段。

mn = np.bincount(idx, abs_error) / np.bincount(idx)
© www.soinside.com 2019 - 2024. All rights reserved.