栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

插值缺失值2d python

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

插值缺失值2d python

是的,您可以使用

scipy.interpolate.griddata
和屏蔽数组,还可以选择使用参数的插值类型,
method
通常
'cubic'
可以很好地完成工作:

import numpy as npfrom scipy import interpolate#Let's create some random  dataarray = np.random.random_integers(0,10,(10,10)).astype(float)#values grater then 7 goes to np.nanarray[array>7] = np.nan

看起来像这样

plt.imshow(array,interpolation='nearest')

x = np.arange(0, array.shape[1])y = np.arange(0, array.shape[0])#mask invalid valuesarray = np.ma.masked_invalid(array)xx, yy = np.meshgrid(x, y)#get only the valid valuesx1 = xx[~array.mask]y1 = yy[~array.mask]newarr = array[~array.mask]GD1 = interpolate.griddata((x1, y1), newarr.ravel(),    (xx, yy),       method='cubic')

这是最终结果:

请注意,如果nan值在边缘且被nan值包围,则无法对thay进行插值并将其保留

nan
。您可以使用
fill_value
参数进行更改。

如果存在NaN值的3x3区域,这将如何工作,您会得到中间点的明智数据吗?

这取决于您的数据类型,您必须执行一些测试。例如,您可以故意对一些好的数据进行蒙版,尝试使用具有蒙版值的数组尝试不同种类的插值,例如三次,线性等,并计算插值与您之前蒙版的原始值之间的差,然后查看方法返回您的细微差别。

您可以使用如下形式:

reference = array[3:6,3:6].copy()array[3:6,3:6] = np.nanmethod = ['linear', 'nearest', 'cubic']for i in method:    GD1 = interpolate.griddata((x1, y1), newarr.ravel(),        (xx, yy),method=i)    meandifference = np.mean(np.abs(reference - GD1[3:6,3:6]))    print ' %s interpolation difference: %s' %(i,meandifference )

这给出了这样的内容:

   linear interpolation difference: 4.88888888889   nearest interpolation difference: 4.11111111111   cubic interpolation difference: 5.99400137377

当然,这是针对随机数的,因此结果可能会有很大差异是正常的。因此,最好的办法是对数据集的“故意遮盖的”部分进行测试,然后看看会发生什么。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/668142.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号