0

蟒蛇问题。

我有一个 numpy 对象数组(B)的列表(A)。我想获得 B 数组中所有对象的对象变量之一的平均值。现在,我只是解析 B 数组,对变量求和,然后除以 B 中的对象数。有没有更好或更 Pythonic 的方法来做到这一点?

如果我能得到 A 列表中所有对象的平均值(即所有对象),那也很棒

4

3 回答 3

0

您正在做的事情对于对象数组来说听起来不错,这确实是获得平均值的唯一方法。至于A中所有元素的平均值,只需在遍历列表时添加每个平均值,然后除以A中的对象总数

于 2012-06-06T21:56:24.917 回答
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')
于 2012-06-07T05:28:08.467 回答
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
于 2012-06-07T06:32:35.633 回答