2013-08-31 2 views
2

У меня есть 4-D (d0, d1, d2, d3, d4) массив numpy. Я хочу, чтобы получить 2-D (d0, d1) означают массив, сейчас мое решение заключается в следующем:Как получить средний массив с numpy

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

Но как я могу использовать numpy.mean, чтобы получить средний массив.

ответ

4

Вы можете изменить форму, а затем выполнить в среднем:

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

в NumPy 1.7.1 вы можете передать кортеж на axis аргумент:

res = np.mean(data, axis=(2,3,4)) 
0

По меньшей мере, версия 1.7.1, mean поддерживает кортеж осей для параметра axis, хотя эта функция не документирована. Я считаю, что это случай устаревшей документации, а не то, на что вы не должны полагаться, поскольку подобные процедуры, такие как sum, документируют одну и ту же функцию. Тем не менее, использовать на свой страх и риск:

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

Если вы не хотите использовать недокументированные функции, вы можете просто сделать два прохода:

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

Но я думаю, что ваш путь немного медленнее, чем мой. Beacause у вас есть право разделить два раза – Samuel

+0

@Samuel Почему вы не используете 'timeit' и видите;) – tacaswell

+0

Он поддерживает кортеж для оси в моем NumPy 1.7.1 ... –