Подтвердить что ты не робот

Вычислить среднее значение по размерности в 2D-массиве

У меня есть массив a, как это:

a = [[40, 10], [50, 11]]

Мне нужно рассчитать среднее значение для каждого измерения отдельно, результат должен быть следующим:

[45, 10.5]

45 означает среднее значение a[*][0], а 10.5 - среднее значение a[*][1].

Каков самый элегантный способ решения этой проблемы без использования цикла?

4b9b3361

Ответ 1

a.mean() принимает аргумент axis:

In [1]: import numpy as np

In [2]: a = np.array([[40, 10], [50, 11]])

In [3]: a.mean(axis=1)     # to take the mean of each row
Out[3]: array([ 25. ,  30.5])

In [4]: a.mean(axis=0)     # to take the mean of each col
Out[4]: array([ 45. ,  10.5])

Или, как отдельная функция:

In [5]: np.mean(a, axis=1)
Out[5]: array([ 25. ,  30.5])

Причина, по которой ваша нарезка не работает, заключается в том, что это синтаксис для нарезки:

In [6]: a[:,0].mean() # first column
Out[6]: 45.0

In [7]: a[:,1].mean() # second column
Out[7]: 10.5

Ответ 2

Вот решение, отличное от numpy:

>>> a = [[40, 10], [50, 11]]
>>> [float(sum(l))/len(l) for l in zip(*a)]
[45.0, 10.5]

Ответ 3

Если вы делаете это много, NumPy - это путь.

Если по какой-то причине вы не можете использовать NumPy:

>>> map(lambda x:sum(x)/float(len(x)), zip(*a))
[45.0, 10.5]