2012-06-06 5 views
0

Вопрос Python.Среднее значение переменных объекта в массиве python

У меня есть список (A) массивов объектов numpy (B). Я хотел бы получить среднее значение одной из переменных объекта для всех объектов в массиве B. Прямо сейчас, я просто разбираюсь в массиве B, суммируя переменную и деля ее на количество объектов в B. Есть ли лучший или более питонический способ сделать это?

Было бы здорово, если бы я мог получить среднее значение всех объектов в виде списка (то есть все объекты)

ответ

0

Если у вас есть Numpy массива, вы можете просто вызвать mean метод:

In [24]: import numpy as np 

In [25]: b = np.arange(5) 

In [26]: b 
Out[26]: array([0, 1, 2, 3, 4]) 

In [27]: b.mean() 
Out[27]: 2.0 

Если у вас есть список Numpy массивов, получая среднее значение каждой NumPy просто:

In [28]: A = [np.arange(i) for i in range(3, 6)] 

In [29]: A 
Out[29]: [array([0, 1, 2]), array([0, 1, 2, 3]), array([0, 1, 2, 3, 4])] 

In [30]: for B in A: print B.mean() 
1.0 
1.5 
2.0 

Или, если вы пытаетесь получить среднее значение всех элементов (по всем элементам B в A), используйте sum метод:

In [31]: sum(B.sum() for B in A)/sum(len(B) for B in A) 
Out[31]: 1.5833333333333333 
0

То, что вы делаете хорошо звучит для массивов объектов, это действительно единственный способ получить в среднем. Что касается среднего значения всех элементов в A, просто добавьте каждый в среднем, как вы итерацию по списку, а затем разделить на общее количество объектов в

+0

вам нужно добавить каждый элемент, когда вы перебираете список, а затем делитесь. –

0

Вы можете обернуть все это в списке понимание:

[sum(x)/len(x) for x in array_list] 

Если вы хотите, чтобы получить среднее значение всех объектов, вы можете сделать следующее:

from __future__ import division 
sums, lengths = zip(*[(sum(x),len(x)) for x in array_list]) 
mean = sum(sums)/sum(lengths) 
# still can get averages for each object too 
array_averages = [s/l for s,l in zip(sums,lengths)] 

Просто потому, что я был смущен о синтаксисе распаковки списка в почтовый индекс в первый раз, быстро иллюстрации :

>>> tuples = [(1,2,'a'), (3,4,'b'), (5,6,'c'), (7,8,'d')] 
>>> print zip(*tuples) 
[(1,3,5,7), (2,4,6,8), ('a','b','c','d')] 
>>> a,b,c = zip(*tuples) 
>>> print a 
(1,3,5,7) 
>>> print c 
('a','b','c','d') 
Смежные вопросы