首页 > 解决方案 > 如何在网格中为点列表进行二维插值

问题描述

似乎这里的一些相关问题没有给我想要的答案。

所以我有一个二维查找表,它是一个二维网格,其值位于网格坐标处。例如,可以通过以下代码生成这样的表:

xx, yy = np.meshgrid(np.arange(100), np.arange(100))
zz = some_function(xx, yy)

现在我有一个网格上分散点的坐标列表,例如,我可以通过以下方式生成这样的坐标:

xs = np.random.rand(10) * 100
ys = np.random.rand(10) * 100

scattered_points = [(x, y) for x, y in zip(xs, ys)]

如何插入这 10 个点的 z 值?我只发现我可以通过搜索 (x, y) 的相邻网格点并在那里执行插值来做到这一点。有几点没问题,但我只是想知道是否有更好的/pythonic 方法可以使用numpy/来做到这一点scipy

标签: pythonnumpyscipy

解决方案


这应该适用于您所描述的内容。(更新)

from scipy.interpolate import interp2d
import numpy as np

xx, yy = np.meshgrid(np.arange(100), np.arange(100))
zz = some_function(xx,yy)

f = interp2d(xx, yy, zz, kind='cubic')

xs = np.random.rand(10) * 100
ys = np.random.rand(10) * 100
zs = np.zeros_like(xs)

for i in range(xs.shape[0]):
    zs[i]=f(xs[i],ys[i])

推荐阅读