我正在进行一些统计工作,我有一个(大量的)随机数集合需要计算平均值,我想使用生成器进行操作,因为我只需要计算平均值,所以不需要存储这些数字。
问题是numpy.mean如果传递一个生成器会出错。我可以编写一个简单的函数来实现我的目标,但我想知道是否有适当的内置方法来完成这个任务?
如果能够这样说就太好了:"sum(values)/len(values)",但是len不能用于生成器,而且sum已经消耗掉了values。
以下是一个示例:
问题是numpy.mean如果传递一个生成器会出错。我可以编写一个简单的函数来实现我的目标,但我想知道是否有适当的内置方法来完成这个任务?
如果能够这样说就太好了:"sum(values)/len(values)",但是len不能用于生成器,而且sum已经消耗掉了values。
以下是一个示例:
import numpy
def my_mean(values):
n = 0
Sum = 0.0
try:
while True:
Sum += next(values)
n += 1
except StopIteration: pass
return float(Sum)/n
X = [k for k in range(1,7)]
Y = (k for k in range(1,7))
print numpy.mean(X)
print my_mean(Y)
这两个函数的输出结果相同且正确,但是my_mean函数不能用于列表,而numpy.mean函数不能用于生成器。
我真的很喜欢使用生成器来编程,但是像这样的细节似乎破坏了一切。
sum
函数),你可以创建一个计数生成器,并像这样调用它:co = countingGen(); mean = sum(co(data))/co.getCount()
。 - Thomas Ahle