При условии, что data
равномерно делится на требуемое количество подсписков, вы можете reshape
массив и затем использовать np.average
с соответствующим параметром axis
.
>>> data
array([-0.22609503, -0.4501512 , -0.46334891, 1.18450149, -1.17728558,
1.27805933, 0.25943615, -1.18671214, 0.96818224, 0.32928086])
>>> np.average(data.reshape((2, -1)), axis=0)
array([ 0.52598215, -0.09535752, -0.82503053, 1.07634186, -0.42400236])
>>> np.average(data.reshape((2, -1)), axis=1)
array([-0.22647585, 0.32964929])
Еслисписок не делится поровну, вы можете обрезать последние несколько элементов;кажется, вы делаете что-то подобное и в своем коде.Результат тот же, и он значительно быстрее.
>>> data = np.random.randn(127874)
>>> %timeit np.asarray(list(average(2, data)))
10 loops, best of 3: 36.8 ms per loop
>>> %timeit np.average(data.reshape((2, len(data)//2)), axis=0)
10000 loops, best of 3: 115 µs per loop
(Использование list(average(...))
из-за разного поведения map
в Python 2 по сравнению с 3; обратите внимание, что ваш код создает многовременные списки, в том числе созданные map
.)