微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Python中带有间隙的数据的Griddata插值

如何解决在Python中带有间隙的数据的Griddata插值

我使用scipy内插griddata将数据内插到网格中时遇到问题。我的数据是二维的,格式为:X数组,Y数组和Z强度。 由于这些数据的间隔不均匀,因此我想将它们重新插值到网格中,以便保存图像以便以后使用。

如果我有一个Z数据块,它可以正常工作。当我有不连续的Z数据时(例如没有数据的区域分隔的数据的“孤岛”),就会出现我的问题。在这种情况下,插值也会发生在我的数据块之间的间隙中。

问题的一些说明:

Image interpolation problem

有什么方法可以正确插值我的数据吗?

(非常简单的)代码的某些部分:

import numpy as np
from scipy import interpolate

X=data['X']
Y=data['Y']
Z=data['Z']

Xa,Ya=np.linspace(min_x,max_x,dim_x),np.linspace(min_y,max_y,dim_y) #dimensions of my grid,depends on the dataset I have
XX,YY=np.meshgrid(Xa,Ya) #creation of the grid
Zb = interpolate.griddata((X,Y),Z,(XX,YY),method='linear')

我尝试过“最近”或“三次”,但我也不工作...

编辑:我添加一个文本文件,其中包含我尝试进行插值的X,Y和Z以及新的“ Zb”插值数据,以显示问题。上图中绘制了相同的数据。 数据在这里可用:Gdrive

解决方法

我有类似的问题。我通过计算不同的网格(在您的问题中,每个磁盘应该是一个网格)和等高线图来解决此问题,但是具有相同的整个值范围并将它们绘制在一起。 可能不是“优雅”,但可以。 阿兰

,

我找到的解决方案在于放弃对数据进行插值的想法。 取而代之的是,在读取数据时,我定义了一个ROI(min_x,max_x,resolution_x,并且与y相同),通过对数据进行迭代来填充(具有各种选项(最小值,最大值,平均值...))。它可能不是最快的解决方案,但它可以工作并且不会产生伪像!

import numpy as np

min_x,max_x,dim_x = (xxx,XXX,x) #limits on the dataset
min_y,max_y,dim_y = (yyy,YYY,y)

sorting_method="Max" #the method can be configured by the user

def find_nearest(array,value):
    array = np.asarray(array)
    idx = (np.abs(array - value)).argmin()
    return idx

X=data['X'] #This dataset must be sorted so that only the data falling into the ROI is kept
Y=data['Y']
Z=data['Z']

pos_x=np.arange(min_x,res_x)
pos_y=np.arange(min_y,res_y)


ROI=np.zeros((dim_y,dim_x))

for values in X:
        loc_x=find_nearest(pos_x,values)
        loc_y=find_nearest(pos_y,Y[i])
        if sorting_method=='Max':
            ROI[loc_y,loc_x,0]=max(ROI[loc_y,0],Z[i])

Zb=ROI[::-1,:]

感谢大家的宝贵意见!

Al

Example image on disks

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。