分箱数据并计算 Python 中每个分箱的 MAE
Binning data and calculating MAE for each bin in Python
我有两个数组:
Obs=([])
abs_error=([])
我想用 Obs 来定义 bins。例如,如果 Obs 是 1 到 2,则 bin abs_error 进入 bin#1。然后 Obs 是 2 到 3,bin abs_error 进入 bin#2。等等
一旦我分箱 abs_error(由 Obs 分箱),我想计算每个分箱的平均值,然后绘制 y 轴上每个分箱的均值与 x 轴上的分箱-轴。
如何通过 Obs 定义的 bins 对 abs_error 进行分箱?完成后如何计算每个 bin 的平均值?
现在我有:
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]
我无法打印整个数组,因为它们非常大。
如果您的 bin 大小相同,您可以使用 floor division 从 Obs
获取 bin 索引,在您的示例中。
idx = (Obs // 1).astype(int)
如果不使用 np.digitize
代替。
idx = np.digitize(Obs, bin_boundaries)
一旦你有了索引,就可以将它们与 np.bincount
一起使用以获得平均值。
mn = np.bincount(idx, abs_error) / np.bincount(idx)
我有两个数组:
Obs=([])
abs_error=([])
我想用 Obs 来定义 bins。例如,如果 Obs 是 1 到 2,则 bin abs_error 进入 bin#1。然后 Obs 是 2 到 3,bin abs_error 进入 bin#2。等等
一旦我分箱 abs_error(由 Obs 分箱),我想计算每个分箱的平均值,然后绘制 y 轴上每个分箱的均值与 x 轴上的分箱-轴。
如何通过 Obs 定义的 bins 对 abs_error 进行分箱?完成后如何计算每个 bin 的平均值?
现在我有:
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]
我无法打印整个数组,因为它们非常大。
如果您的 bin 大小相同,您可以使用 floor division 从 Obs
获取 bin 索引,在您的示例中。
idx = (Obs // 1).astype(int)
如果不使用 np.digitize
代替。
idx = np.digitize(Obs, bin_boundaries)
一旦你有了索引,就可以将它们与 np.bincount
一起使用以获得平均值。
mn = np.bincount(idx, abs_error) / np.bincount(idx)