我有很多数据,通常是在一个文件中.我想计算一些数量,所以我有这样的功能:
def mean(iterator):
n = 0
sum = 0.
for i in iterator:
sum += i
n += 1
return sum / float(n)
Run Code Online (Sandbox Code Playgroud)
我也有很多其他类似的功能(var,size,...)
现在我有一个迭代器迭代数据:iter_data.我可以计算我想要的所有数量:m = mean(iter_data); v = var(iter_data)等等,但问题是我多次迭代,这在我的情况下是昂贵的.实际上I/O是最昂贵的部分.
所以,问题是:我可以计算我的批量m, v, ...迭代只是一个时间上iter_data 保持独立的功能mean,var...所以,它很容易增加新的?
我需要的是类似于boost :: accumulators的东西
例如,使用对象和回调,如:
class Counter():
def __init__(self):
self.n = 0
def __call__(self, i):
self.n += 1
class Summer():
def __init__(self):
self.sum = 0
def __call__(self, i):
self.sum += i
def process(iterator, callbacks):
for i in iterator:
for f in callbacks: f(i)
counter = Counter()
summer = Summer()
callbacks = [counter, summer]
iterator = xrange(10) # testdata
process(iterator, callbacks)
# process results from callbacks
n = counter.n
sum = summer.sum
Run Code Online (Sandbox Code Playgroud)
这很容易扩展,只迭代数据一次.
| 归档时间: |
|
| 查看次数: |
131 次 |
| 最近记录: |