marcelorodrigues
marcelorodrigues

Reputation: 1039

Mean over multiple axis in NumPy

I Want to write the code below as Pythonic way, applying mean over two axis. What the best way to do this?

import numpy as np

m = np.random.rand(30, 10, 10)  
m_mean = np.zeros((30, 1))    
for j in range(30):
    m_mean[j, 0] = m[j, :, :].mean()

Upvotes: 26

Views: 32054

Answers (2)

kmario23
kmario23

Reputation: 61355

You can also use the numpy.mean() ufunc and pass the output array as an argument to out= as in:

np.mean(m, axis=(1, 2), out=m_mean)

Upvotes: 2

user2357112
user2357112

Reputation: 280688

If you have a sufficiently recent NumPy, you can do

m_mean = m.mean(axis=(1, 2))

I believe this was introduced in 1.7, though I'm not sure. The documentation was only updated to reflect this in 1.10, but it worked earlier than that.

If your NumPy is too old, you can take the mean a bit more manually:

m_mean = m.sum(axis=2).sum(axis=1) / np.prod(m.shape[1:3])

These will both produce 1-dimensional results. If you really want that extra length-1 axis, you can do something like m_mean = m_mean[:, np.newaxis] to put the extra axis there.

Upvotes: 46

Related Questions