Dominik Raab
Dominik Raab

Reputation: 35

Average every n element of axis 1 in a 3D numpy ndarray

I have a 3D numpy of shape (900,10,54). And I want to average the values of every two elements into one, for axis 1.

Expected outcome would have shape: (900,5,54).

Upvotes: 1

Views: 656

Answers (1)

swag2198
swag2198

Reputation: 2696

One way to do this:

This uses numpy array slicing to achieve this.

import numpy as np
x = np.random.rand(900, 10, 64)
y = (x[:, ::2, :] + x[:, 1::2, :]) / 2

Another approach:

If you have a variable number of consecutive elements in axis = 1 that you want to sum (which was 2 above), you can use reshape and mean to achieve this.

n = 2
y = x.reshape(x.shape[0], x.shape[1] // n, n, x.shape[2]) # shape = (900, 5, 2, 64)
y = y.mean(axis = 2)

This sums consecutive n rows for each of inner matrices in your 3D array x.

Upvotes: 3

Related Questions