我有几点:
points = np.array([[0, 105],[5000, 105],[0, 135],[5000, 135],[0, 165],[5000, 165]])
字符串
和价值观
values = np.array([[300, 380, 300, 390, 300, 400]]).transpose()
型
我尝试插值的输入
xi = np.array([[2500, 105],[2500, 125],[2500, 135],[2500, 150],[2500, 165]])
型
具有双线性插值的预期结果(参考:https://en.wikipedia.org/wiki/Bilinear_interpolation)
[340, 343.3333, 345, 347.5, 350]
型
我的工作为第二个例子使用双线性插值
x1=2500, y1=105 giving z1=340
x2=2500, y2=135 giving z2=345
Hence for x3=2500, y3=125 gives z3=343.3333
型
但随着
gd = griddata(points, values, xi, method='linear', rescale=True)
型
我正在得到结果
[340, 345, 345, 345, 350]
型
我一定是错过了一些简单的东西在这里,但没有得到任何尝试多种不同的方法。
3条答案
按热度按时间g0czyy6m1#
如果您正确地提供了数据,则可以使用
scipy.interpolate.interpn
完成此操作。(对于2D情况)。然后以与网格对应的格式定义值,这是2D情况下np.meshgrid(x, y, indexing="ij")
的结果。请确保严格按升序或降序提供x和y,否则interpn
将抛出错误。字符串
这里它是作为一个函数编写的,尽管它没有一般使用所需的所有功能,即检查输入,确保正确的数据库等。
型
ukdjmx9f2#
我运行代码,得到和你一样的结果。
字符串
结果是:
型
如果我把
linear
改为cubic
,我得到:型
这是更接近你所期望的.所以它看起来像一个插值方法的问题。
它看起来就像你在这个曲面上插值:
的数据
如果你能展示你是如何达到预期结果的,那么这将是有帮助的。
up9lanfz3#
这是一个很长的问题:你可以写一个函数来完成同样的任务:
字符串