如何计算一系列数字的运行平均值的问题是asked and answered before。但是,我试图计算一系列ndarray的运行平均值,具有未知的系列长度。所以,例如,我有一个迭代器data
,我会这样做:
running_mean = np.zeros((1000,3))
while True:
datum = next(data)
running_mean = calc_running_mean(datum)
calc_running_mean
会是什么样的?我主要关注的是内存,因为我无法将全部数据存储在内存中,而且我不知道我将收到多少数据。 datum
将是一个ndarray,让我们说,对于这个例子,它是一个(1000,3)
数组,并且运行的意思是一个相同大小的数组,每个元素包含到目前为止我们在该位置看到的每个元素的元素均值。
这个问题与以前的问题的关键区别在于它计算了一系列ndarray的元素均值,并且数组的数量是未知的。
答案 0 :(得分:1)
您可以将itertools
与标准运算符一起使用:
>>> import itertools, operator
>>> running_sum = itertools.accumulate(data)
>>> running_mean = map(operator.truediv, running_sum, itertools.count(1))
示例:
>>> data = (np.linspace(-i, i*i, 6) for i in range(10))
>>>
>>> running_sum = itertools.accumulate(data)
>>> running_mean = map(operator.truediv, running_sum, itertools.count(1))
>>>
>>> for i in running_mean:
... print(i)
...
[0. 0. 0. 0. 0. 0.]
[-0.5 -0.3 -0.1 0.1 0.3 0.5]
[-1. -0.46666667 0.06666667 0.6 1.13333333 1.66666667]
[-1.5 -0.5 0.5 1.5 2.5 3.5]
[-2. -0.4 1.2 2.8 4.4 6. ]
[-2.5 -0.16666667 2.16666667 4.5 6.83333333 9.16666667]
[-3. 0.2 3.4 6.6 9.8 13. ]
[-3.5 0.7 4.9 9.1 13.3 17.5]
[-4. 1.33333333 6.66666667 12. 17.33333333 22.66666667]
[-4.5 2.1 8.7 15.3 21.9 28.5]