相同边界框但不同网格结构的平面在二维平面上的插值

zengzsys  于 2021-07-14  发布在  Java
关注(0)|答案(1)|浏览(365)

我在每个相交网格线上(即节点)的计算网格上提供了模拟数据,并希望将其插值到具有相同尺寸(即它们都具有相同的边界框)的新2d平面上,但出于后处理原因,我需要笛卡尔网格,而不是任意曲线网格。下图演示了这个问题(顶部网格是我的计算数据可用的地方,底部网格是我要对这些值进行插值的地方)

顶部图像(即没有可用信息的位置)中的间隙可以简单地用插值平面(底部图像)上的0或-1填充,表示此处没有可用值。
用于计算数据(顶部图像)的数据基本上作为csv数据可用,例如(对于x-y平面中在xmin=0、ymin=0、xmax=1、ymax=5之间定向的2d平面)

x, y, z, data_1, data_2, ..., data_n
0.0, 0.0, 0.0, 1.0, 1.7, ..., 0.9
0.1, 0.0, 0.0, 1.1, 1.3, ..., 1.2
0.2, 0.0, 0.0, 1.3, 1.1, ..., 1.3
..., ..., ..., ..., ..., ..., ...
1.0, 5.0, 0.0, 1.0, 0.3. ..., 0.6

然而,鉴于上图,x和y中的数据项可能并不总是被排序的。
我现在的问题是,是否有一个包/库可以执行这种插值(而不是重新发明轮子)?我对语言很灵活,但如果有选择的话,我更喜欢c++/python。

daolsyd0

daolsyd01#

在python中,可以使用scipy.interpolate.griddata。它接受非结构化数据并将其插值到给定的点上:

from scipy.interpolate import griddata
import numpy as np

# Generate some xy coordinates at random positions and some values at each coordinate:

xy = [(x, y) for x, y in np.random.random((100, 2))]
v = [(x - y, x+y) for x, y in xy]  # Note - v can have more than 1 dimension if desired

# Define a grid:

grid = [(x, y) for x in np.linspace(0, 1, 21) for y in np.linspace(0, 1, 21)]

# Interpolate v onto the grid

interpolated = griddata(xy, v, grid)

# interpolated[n] is the value at the position grid[n], for example

# grid[50] = 0.1, 0.4

# interpolated[5] = [-0.3, 0.5] ( = 0.1-0.4, 0.1+0.4)

在你的情况下,你需要意识到 griddata 将在网格上的间隙内插-值不是0或1,而是间隙周围点之间的任何插值。

相关问题