I have a numpy array with floats.
What I would like to have (if it is not already existing) is a function that gives me a new array of the average of every x points in the given array, like sub sampling (and opposite of interpolation(?)).
E.g. sub_sample(numpy.array([1, 2, 3, 4, 5, 6]), 2) gives [1.5, 3.5, 5.5]
E.g. Leftovers can be removed, e.g. sub_sample(numpy.array([1, 2, 3, 4, 5]), 2) gives [1.5, 3.5]
Thanks in advance.
Using NumPy routines you could try something like
import numpy
x = numpy.array([1, 2, 3, 4, 5, 6])
numpy.mean(x.reshape(-1, 2), 1) # Prints array([ 1.5, 3.5, 5.5])
and just replace the 2
in the reshape
call with the number of items you want to average over.
Edit: This assumes that n
divides into the length of x
. You'll need to include some checks if you are going to turn this into a general function. Perhaps something like this:
def average(arr, n):
end = n * int(len(arr)/n)
return numpy.mean(arr[:end].reshape(-1, n), 1)
This function in action:
>>> x = numpy.array([1, 2, 3, 4, 5, 6])
>>> average(x, 2)
array([ 1.5, 3.5, 5.5])
>>> x = numpy.array([1, 2, 3, 4, 5, 6, 7])
>>> average(x, 2)
array([ 1.5, 3.5, 5.5])