2D numpy数组中的平均零值

时间:2017-03-24 23:27:19

标签: python numpy interpolation

我有一个看起来像这样的numpy数组:

1  0 0 0 200 0 0 0 1
6  0 0 0   2 0 0 0 4.3
5  0 0 0   1 0 0 0 7.1

预期出局将是

1  100 100 100 200 100 100 100 1
6    4   4   4   2 3.15 3.15 3.15 4.3
5    3   3   3   1 4.05 4.05 4.05 7.1

我希望将所有0值替换为其邻居的平均值。任何提示都欢迎!非常感谢!

1 个答案:

答案 0 :(得分:0)

如果样本数组中的结构在整个数组中保留,则此代码将起作用:

In [159]: def avg_func(r):
              lavg = (r[0] + r[4])/2.0
              ravg = (r[4] + r[-1])/2.0
              r[1:4] = lavg
              r[5:-1] = ravg
              return r

In [160]: np.apply_along_axis(avg_func, 1, arr)
Out[160]: 
array([[   1.  ,  100.5 ,  100.5 ,  100.5 ,  200.  ,  100.5 ,  100.5 ,  
           100.5 ,    1.  ],
       [   6.  ,    4.  ,    4.  ,    4.  ,    2.  ,    3.15,    3.15,
           3.15,    4.3 ],
       [   5.  ,    3.  ,    3.  ,    3.  ,    1.  ,    4.05,    4.05,
           4.05,    7.1 ]])

但是,正如您所看到的,对索引进行硬编码有点麻烦。在此处定义avg_func时,您必须获得创意。随意改进此解决方案并获得创意。另请注意,此实现会对输入数组进行就地修改。