Python - 在数据行之间进行插值

标签 python numpy matplotlib scipy

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

我的问题是,我的数据坐标沿 X 轴的间隔非常紧密(约 1000 点),而我的 Y 坐标则分散(约 50 点)。这意味着当在散点图上绘制时,我基本上拥有相邻线之间具有相等数量空白的数据线。

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

ooooooooooooooooooooooooooooooo


ooooooooooooooooooooooooooooooo


ooooooooooooooooooooooooooooooo

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

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

您能提供的任何帮助都会非常有帮助。

编辑:

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

最佳答案

我推荐这个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) .

关于Python - 在数据行之间进行插值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14106912/

相关文章:

python - 列表理解 : is there a concise way to refer to the initial expression in the if condition?

python - 剩余行总和的矢量化版本

python - 绘制多个信号的最pythonic方式

python - Matplotlib:如何用等面积的箱子制作直方图?

python - 使用可移动的字符/图像在 Pygame 中添加边界

python - 如果我想构建一个独立的程序而不是一个包,我是否需要 __init__.py ?

python - 给定均值和标准差生成二维正态分布

python - 在python中导入/读取csv文件,然后绘图,给出x=y图?

python - 如何在特定列上生成 kmeans?

python - numpy 条件列表成员元素明智