将数据插值到三角形网格

时间:2019-05-15 00:22:34

标签: python-3.x interpolation triangular spatial-interpolation

人们将非结构化数据插值到结构化输出中有很多问题(和答案)。解决方案包括网格网格或二元样条曲线。但是我正在寻找逆向。如何将结构化数据插值到非结构化(delaulany)三角形(快速)?

我的数据已加载到pygiomsh的meshio中。

import meshio as mio
data = mio.read(fname)

data.cells['vertex'].shape
Out[128]: (2906, 1)
data.cells['triangle'].shape
Out[129]: (213898, 3)

plt.figure()
plt.tripcolor(data.points[:, 0], data.points[:, 1], -data.points[:, 2])
plt.triplot(data.points[:, 0], data.points[:, 1], 'k.', ms=2)

显示下面的图shoreline data。我正在尝试在此三角形网格上更新新数据。我计划将规则结构化数据的值插值到空间中的相同点,然后更新三角形网格的值。

1 个答案:

答案 0 :(得分:0)

我找到的最接近的东西是Python: interpolating in a triangular mesh

解决该问题,并举例说明。

newBathy['lon'].shape
Out[154]: (1040, 271)
newBathy['lat'].shape
Out[155]: (1040, 271)
newBathy['elevation'].shape
Out[156]: (1040, 271)
#I have to flatten so i don't get a shape error 
triObj = tri.Triangulation(newBathy['lon'].flatten(), newBathy['lat'].flatten()) 
ftri = tri.LinearTriInterpolator(triObj, newBathy['elevation'].flatten())
newZs = ftri(data.points[:, 0], data.points[:, 1])

这仅给我留下了已知域中一小部分的数据,但是我可以从data.points([:,3])的值中更新newZ中的非掩码值。三次插值需要花费一些时间并使我的计算机听起来像飞船,因此还没有找到最好的方法。线性显然有效,但看起来可能更好。

enter image description here