Python - 在数据行之间插值

时间:2013-01-01 00:00:19

标签: python numpy matplotlib scipy

我有一个以点(x,Y,Z)为特征的2d网格数据。 X和Y值表示每个点的位置,Z是每个点的“高度”或“强度”。

我的问题是我沿X轴的数据坐标间距非常近(~1000点),而我的Y坐标则是展开(~50点)。这意味着当在散点图上绘制时,我基本上拥有相邻行之间具有相等空白空间的数据行。

我的数据在散点图上的间距示例:

ooooooooooooooooooooooooooooooo


ooooooooooooooooooooooooooooooo


ooooooooooooooooooooooooooooooo

我想插入这些点以获得连续的表面。我希望能够评估此表面上任何位置的“高度”。我已经尝试了似乎每个scipy插值方法,并且不确定最“智能”的方法是什么。我应该插入每个垂直数据片段,然后将它们拼接在一起吗?

我希望表面尽可能光滑,但需要一种形状保持方法。我不希望任何插值曲面超出我的输入数据。

您可以提供的任何帮助都非常有帮助。

修改

当我更多地考虑这个问题时,似乎插入垂直切片然后将它们拼接在一起是行不通的。这会导致沿垂直切片的值仅受该切片的影响,这不会导致表面不准确吗?

2 个答案:

答案 0 :(得分:3)

我推荐这个tutorial。它的内容是(从链接中解除):

>>> grid_x, grid_y = np.mgrid[0:1:100j, 0:1:200j]
>>> from scipy.interpolate import griddata
>>> grid_z0 = griddata(points, values, (grid_x, grid_y), method='nearest')
>>> grid_z1 = griddata(points, values, (grid_x, grid_y), method='linear')
>>> grid_z2 = griddata(points, values, (grid_x, grid_y), method='cubic')

这将为您提供三种不同级别的数据插值(doc)

答案 1 :(得分:0)

如果您正在寻找表面,我的假设是您可以使用垂直切片,然后绘制填充的数据。