从迭代器运行numpy ndarrays的意思

时间:2018-06-13 20:35:59

标签: python numpy

如何计算一系列数字的运行平均值的问题是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的元素均值,并且数组的数量是未知的。

1 个答案:

答案 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]