2

I have a 4-D(d0,d1,d2,d3,d4) numpy array. I want to get a 2-D(d0,d1)mean array, Now my solution is as following:

area=d3*d4
mean = numpy.sum(numpy.sum(data, axis=3), axis=2) / area

But How can I use numpy.mean to get the mean array.

2 Answers 2

4

You can reshape and then perform the average:

res = data.reshape(data.shape[0], data.shape[1], -1).mean(axis=2)

In NumPy 1.7.1 you can pass a tuple to the axis argument:

res = np.mean(data, axis=(2,3,4))
Sign up to request clarification or add additional context in comments.

Comments

0

In at least version 1.7.1, mean supports a tuple of axes for the axis parameter, though this feature isn't documented. I believe this is a case of outdated documentation rather than something you're not supposed to rely on, since similar routines such as sum document the same feature. Nevertheless, use at your own risk:

mean = data.mean(axis=(2, 3))

If you don't want to use undocumented features, you can just make two passes:

mean = data.mean(axis=3).mean(axis=2)

4 Comments

But I think your way is a little slower than mine. Beacause you have two time's division right
@Samuel Why don't you use timeit and see ;)
Huh, it does. Neither the 1.7 documentation nor the development version draft documentation say anything about that, and it doesn't look like there's any 1.7.1-specific documentation.
That's true... they should include this in the documentation since it's such an useful feature... I opened a ticket in GitHub...

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.