我有一个看起来像这样的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值替换为其邻居的平均值。任何提示都欢迎!非常感谢!
答案 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
时,您必须获得创意。随意改进此解决方案并获得创意。另请注意,此实现会对输入数组进行就地修改。