Данные биннинга и расчет MAE для каждого бина в Python - PullRequest
0 голосов
/ 28 марта 2019

У меня есть два массива:

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

Я хочу использовать Obs для определения корзин.Например, где Obs от 1 до 2, bin abs_error в bin # 1.Тогда, когда Obs от 2 до 3, поместите abs_error в bin # 2.и т. д.

Как только я получу свой bin_ abs_error (который был сгенерирован Obs), я хочу вычислить среднее значение каждого бина и затем построить среднее значение каждого бина на оси Y против бинов на x-axis.

Как мне скомпоновать abs_error с помощью бинов, определенных Obs?И как рассчитать среднее значение для каждой ячейки, как только это будет сделано?

Прямо сейчас у меня есть:

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]

Я не могу напечатать целые массивы, потому что они очень большие.

1 Ответ

1 голос
/ 28 марта 2019

Если ваши лотки имеют одинаковый размер, вы можете использовать разделение по полу для получения индексов лотков от 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)
...