Предположим, у меня есть массив 1d Numpy размером n. Как я могу выполнить средний пул, чтобы изменить размер массива до размера m, где коэффициент R = n / m не является целым числом. Это было бы эквивалентно разделению массива на нецелые ячейки и вычислению среднего значения для каждой ячейки. Фрагмент кода показывает функциональность, которую я ищу, он вычисляет среднее значение для каждого бина, а также принимает во внимание элементы массива, которые только в бинарном порядке.
result = []
bins = np.linspace(0, len(array), m+1)
for i, j in zip(bins[:-1], bins[1:]):
i_ceil = int(np.ceil(i))
i_diff = i_ceil - i
j_floor = int(np.floor(j))
j_diff = j - j_floor
numerator = np.sum(array[i_ceil:j_floor]) + array[max(0, i_ceil-1)] * i_diff + array[min(len(array)-1, j_floor)] * j_diff
result.append(numerator / (j-i))
assert np.mean(np.array(result)) == np.mean(array)
return np.array(result)