0

I have a numpy array with millions of values. It has only a dimension. I'd like to return a new numpy array with the mean values of each tens.

What could be the solution?

Thanks for the support!

Marco
  • 27
  • 5
  • 3
    Does this answer your question? [Averaging over every n elements of a numpy array](https://stackoverflow.com/questions/15956309/averaging-over-every-n-elements-of-a-numpy-array) – Jafar Isbarov Feb 15 '22 at 09:29

3 Answers3

2

reshape, sum, and divide by 10:

N = 10
a.reshape(-1,N).sum(1)/N

or, using numpy.mean:

np.mean(a.reshape(-1,10), 1)

NB. You need to ensure you array has a length that is a multiple of N. If not, slice to truncate or pad to add missing values

example:

a = np.arange(10*20)
a.reshape(-1,10).sum(1)/10

output:

array([  4.5,  14.5,  24.5,  34.5,  44.5,  54.5,  64.5,  74.5,  84.5,
        94.5, 104.5, 114.5, 124.5, 134.5, 144.5, 154.5, 164.5, 174.5,
       184.5, 194.5])
mozway
  • 194,879
  • 13
  • 39
  • 75
0

Suppose 'a' is your array with million or so entries, then you can get desired output as follows:

x = np.array([np.mean(a[i:i+10]) for i in range(0, len(a), 10)]) 
0

If your array is not well balanced, fill your array with nan and use np.nanmean to calculate the mean:

a = np.arange(123)
N = 10
M = int(np.ceil(len(a) / 10) * 10 - len(a))
b = np.nanmean(np.concatenate([a, np.full(M, np.nan)]).reshape(-1, N), axis=1)

Output:

>>> b
array([  4.5,  14.5,  24.5,  34.5,  44.5,  54.5,  64.5,  74.5,  84.5,
        94.5, 104.5, 114.5, 121. ])

121 = (120 + 121 + 122 + nan + nan + nan + nan + nan + nan + nan) / 3

Corralien
  • 109,409
  • 8
  • 28
  • 52