Обчислити середнє значення розмірності у 2D-масиві


82

У мене є такий масив a:

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

Мені потрібно розрахувати середнє значення для кожного виміру окремо, результат повинен бути таким:

[45, 10.5]

45будучи середнім значенням a[*][0]і 10.5середнім значенням a[*][1].

Який найелегантніший спосіб вирішити це питання без використання циклу?

Відповіді:


131

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

дякую за швидку відповідь. Що In [n]:означає? це частина коду?
otmezger

Я використовую numpy, тож рядки 2 і 3 чудово працюють, але axis=0замістьaxis=1
otmezger

@otmezger axis=0- на наступному рядку. Я редагував, щоб показати більше інформації, можливо, оновити?
askewchan

1
@otmezger Ласкаво просимо. Зверніть увагу, що багато методів масивів numpy беруть аргумент осі саме так.
askewchan

1
@askewchan: що означає mean = np.mean(a, axis=(0,2,3)) mean? знання того, що вхідний тензор (а) має форму (партія, канал, ширина, висота)?
Ріка


4

Якщо ви багато робите це, NumPy - це шлях.

Якщо з якихось причин ви не можете використовувати NumPy:

>>> map(lambda x:sum(x)/float(len(x)), zip(*a))
[45.0, 10.5]
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.