所有人
我目前对matplotlib中griddata生成的插值有一些困难。我有一个数据集,每个数据点包含3个值。我试着把这些数据画成等高线。我遇到的问题是内置的delauny插值在某些数据集上中断。所以,我试着转到natgrid插值。这对某些数据有效。但是,其他数据集在griddata的输出中会产生一些空值。我还应该提到,这些空值出现在大多数值相同的区域(本例中为0)。在
有什么建议可以导致这种情况?在
编辑:这里有更多的细节。在
源数据相当大,无法粘贴到此处。所以,我用一个纸篓来装它。我希望这是允许的。这里有:http://pastebin.com/C7Nvvcaw。它的格式类似于x,y,z。所以第一列是x值,依此类推。这是打印xyz列表中的每一项并将其传送到文件中的结果。在
这同样适用于后插值数据。所以,我也用过纸篓。在这里:http://pastebin.com/ZB6S2qFk。每个[]对应一个特定的y值。不包括y值,因为它们在单独的列表中。不过,它们的范围是Y轴的0-50和X轴的0-100。这是从我的代码中打印zi列表中的每一项并将其传送到一个文件中的输出。在
现在对于代码,我没有附上所有的代码,因为其中很大一部分超出了这个问题的范围。所以,我会发布相关的组件。初始数据在一个列表列表中,提供了在三维中导航数据的能力。我想这类似于一个三维数组,尽管它不仅仅是一个列表列表。源数据的列表称为xyz。在
#Function to get individual column of data
def column(matrix, i):
return [row[i] for row in matrix]
#Getting Max and Mins
xmin = float(min(column(xyz, 0)))
xmax = float(max(column(xyz, 0)))
ymin = float(min(column(xyz, 1)))
ymax = float(max(column(xyz, 1)))
#Resolution for interpolation (x and y list lengths)
resx = 100
resy = 50
xi = np.linspace(xmin, xmax, resx)
yi = np.linspace(ymin, ymax, resy)
x = np.array(column(xyz, 0))
y = np.array(column(xyz, 1))
z = np.array(column(xyz, 2))
zi = griddata(x, y, z, xi, yi, interp='nn')
编辑:我找到了解决办法。0值正在中断插值。我能够捕捉到它们并将它们全部更改为0.1,并且插值不再生成空值。这在我的例子中是可以接受的,因为0和0.1属于相同的轮廓颜色。对于其他用户,如果您需要保持数据的绝对精度,我建议将所有值转换为+1,插值,然后转换插值值-1。这将在不破坏插值方法的情况下保持精度。在
谢谢你的帮助
丹尼尔
目前没有回答
相关问题 更多 >
编程相关推荐