首页 > 解决方案 > python数组的迭代操作(指数移动平均)

问题描述

对于(n,m)( n>=1e6, m>=10) python array a,我想b通过对其应用以下递归操作来派生一个新数组:

b(i, j) = nan if i=0
        = (1 - k) * a(i-1, j)  +  k * a(i, j) if i=1
        = (1 - k) * b(i-1, j)  +  k * a(i, j) if i>1  

其中k是一个固定参数,因此0 < k < 1 注意:数组的大小因此速度(优化/矢量化计算)很重要,以便能够运行使用许多此类操作的完整模拟。可以按如下方式生成
样本:a

import numpy as np
a = np.random.normal(0,1,10) # For m=10
for _ in range(1,1e6): # For n=1e6
    a = np.c_[a, np.random.normal(0,1,10)]
a = a.transpose()

基于小样本输入的样本输出an=m=3k=0.5(注意最后一行)。基本上这是计算指数衰减的平均值

a = [[1, 2, 3],
     [10, 20, 30],
     [100, 200, 300]]
a = np.array(a)
# Expected solution for b is following:
b = [[nan, nan, nan],
     [5.5, 11, 16.5],
     [52.75, 105.5, 158.25]] # (100 + 5.5)/2 = 52.75, (200 + 11)/2 = 105.5, ...
# And below is not expected outcome (last row is not correct here)
b = [[nan, nan, nan],
     [5.5, 11, 16.5],
     [55, 110, 165]]

标签: pythoniterationnumpy-ndarray

解决方案


推荐阅读