首页 > 解决方案 > 矩阵中已知值之间的拉普拉斯插值

问题描述

我正在开发一个热图生成程序,希望能根据建筑物布局提供的值样本填充颜色(这不是基于 GPS 的)。

如果我在大量未知数矩阵中只有几个已知数据点,例如这些数据点,我如何获得在 Python 中插值的值?:

0,0,0,0, 1 ,0,0,0,0,0, 5 ,0,0,0,0, 9
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
0,0,0, 2 ,0,0,0,0,0,0,0,0, 8 ,0,0,0
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
0, 8 ,0,0,0,0,0,0,0, 6 ,0,0,0,0,0,0
0,0,0,0,0, 3 ,0,0,0,0,0,0,0,0, 7 ,0

我知道双线性不会这样做,并且由于周围零点的绝对数量,高斯会将所有峰值降低到低值。这显然是一个矩阵处理命题,我不需要它是平滑的贝塞尔曲线,只要足够接近图形表示就可以了。我的矩阵最终将有大约 1500×900 个单元格大小,大约有 100 个已知点。

插值后,我编写了代码将其全部转换为颜色,没问题。只是现在我将单色像素洒在黑色背景上。

标签: pythonarraysmatrixheatmap

解决方案


提出一个简单的解决方案:

第 1 步:将现有数据点内插和外推到环境中。这可以使用“波传播”类型算法来完成。已知点将它们的值“散布”到周围环境中,直到所有网格都被一些已知值“淹没”。在此阶段结束时,您有许多相交的“磁盘”,并且没有剩下零。

第 2 步:平滑结果(使用双线性过滤或其他一些过滤)。

如果您能够使用 ScyPy,那么interp2d完全可以满足您的需求。一个可能的问题是它似乎不能根据这个问题顺利推断。这意味着靠近墙壁的所有值都将与最近的相邻点相同。这可以通过将温度计放在所有 4 个角落来解决 :)


推荐阅读