scipy Python中带间隙数据的格网数据插值

5m1hhzi4  于 2022-11-10  发布在  Python
关注(0)|答案(2)|浏览(165)

我使用scipy interpolate griddata将数据插入格网时遇到问题。我的数据是二维的,格式为:X阵列,Y阵列和Z中的一些强度。由于这些数据的间隔不均匀,我想将它们重新插值到一个网格中,以便保存图像以供以后使用。
如果我有一个Z数据块,它就能完美地工作。当我有不连续的Z数据时,我的问题就出现了(就像被没有数据的区域分隔开的数据“岛”)。在这种情况下,插值也会发生在我的数据块之间差距中。
对问题的一些说明:

是否有任何方法可以正确地插入我的数据?
(非常简单)代码的某一部分:

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

9rbhqvlz

9rbhqvlz1#

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

w41d8nur

w41d8nur2#

我找到的解决方案是放弃对我的数据进行插值的想法。相反,当阅读我的数据时,我定义了一个ROI(min_x,max_x,resolution_x和y相同),我通过对我的数据进行迭代来填充ROI,并使用各种选项(min,max,average...)。这可能不是最快的解决方案,但它很有效,不会产生伪影!

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,max_x,res_x)
pos_y=np.arange(min_y,max_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,loc_x,0],Z[i])

Zb=ROI[::-1,:]

感谢大家的宝贵意见!
铝合金

相关问题