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

2024-09-28 21:28:04 发布

您现在位置:Python中文网/ 问答频道 /正文

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

enter image description here

顶部图像(即没有可用信息的位置)中的间隙可以简单地用插值平面(底部图像)上的零或-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。p>


Tags: 数据图像信息网格data节点尺寸地方
1条回答
网友
1楼 · 发布于 2024-09-28 21:28:04

在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,它们将是围绕间隙的点之间的任何插值

相关问题 更多 >