我下载的卫星数据包含某些物种的空间分布信息。
当卫星立交桥被视为NaN值时被云覆盖的一些地方。
但是当我想将卫星数据(2-D数组)插入另一种形状时(例如,分辨率更粗糙)。 NaN值让我很烦恼。
由于存在NaN值,scipy.interpolate函数无法返回有限值。
这是我的代码,我上传的数据文件here:
lon,lat = np.linespace(75.12,135.12,241), np.linespace(18.12, 55.12, 149)
data = pd.read_csv("./CH2O-NO2/test.csv").values.reshape(lat.shape[0],lon.shape[1])
我可以使用Basemap包绘制data
的2-d分布。
from scipy import interpolate
#### Coarse lat-lon pairs
lon_2,lat_2 = np.linespace(75.12,135.12,100), np.linespace(18.12, 55.12, 50)
hfunc = interpolate.interp2d(lon, lat, data)
xx,yy = np.meshgrid(lon_2,lat_2)
data_coarser = np.zeros(xx.shape[0]*xx.shape[1])
for i,(x,y) in enumerate(zip(xx,yy)):
data_coarser[i]=hfunc(x,y)
代码运行缓慢,data_coarser有很多NaN值。
在我的日常工作中处理缺失的数据是一个棘手的问题。对于二维阵列式数据集,是否有任何方法可以将NaN值替换为其邻域网格?
答案 0 :(得分:0)
无法发表评论。
正如offeltoffel所提到的,任何填充都会给数据带来偏见。
如果NaN区域不是那么大,您可能会对图像修复技术感兴趣。我能够在OpenCV
找到一些实现,但理论上还有更多不同的想法:http://docs.opencv.org/trunk/df/d3d/tutorial_py_inpainting.html
我能够找到一些用于修复的Wolfram Mathematica函数:https://reference.wolfram.com/language/ref/Inpaint.html。 你也可以谷歌“图像修复”。查询将产生大量关于此事的科学文章。如果你有信心,可以试试其中几个。
另一种可能带来一些成功的方法:用零(或平均值或其他)替换所有NaN,重新缩放它,然后再次用NaN替换零(...)。
希望这可以提供帮助