人们将非结构化数据插值到结构化输出中有很多问题(和答案)。解决方案包括网格网格或二元样条曲线。但是我正在寻找逆向。如何将结构化数据插值到非结构化(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)
显示下面的图。我正在尝试在此三角形网格上更新新数据。我计划将规则结构化数据的值插值到空间中的相同点,然后更新三角形网格的值。
答案 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中的非掩码值。三次插值需要花费一些时间并使我的计算机听起来像飞船,因此还没有找到最好的方法。线性显然有效,但看起来可能更好。