Python问题。
我有一个numpy对象数组(B)的列表(A)。我想得到B数组中所有对象的一个对象变量的平均值。现在,我只是解析B数组,将变量求和并除以B中的对象数。是否有更好或更多的pythonic方法来做到这一点?
如果我能得到A列表中所有对象的平均值(即所有对象),那也很棒
答案 0 :(得分:0)
你所做的对于对象数组来说听起来不错,这实际上是获得平均值的唯一方法。至于A中所有元素的平均值,只需在遍历列表时添加每个平均值,然后除以A中的对象总数
答案 1 :(得分: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)]
仅仅因为我第一次将列表拆包到zip中的语法很困惑,快速插图:
>>> 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')
答案 2 :(得分: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
或者,如果您想要获取所有元素的均值(在A中B的所有元素上),请使用sum
方法:
In [31]: sum(B.sum() for B in A) / sum(len(B) for B in A)
Out[31]: 1.5833333333333333