Python 3D数据集插值

Python interpolation of 3D data set

有谁知道如何使用 Python 对 3D 数据集进行插值?我想在 x、y 和 z 维度中进行插值以获得第 4 列的正确值。非常感谢!

数据如下所示:

x   y       z           
75  1E+00   3.7594E-10  1.0199E-08
75  3E+00   1.1278E-09  3.0379E-08
75  1E+01   3.7593E-09  1.0077E-07
75  3E+01   1.1278E-08  3.0152E-07
75  1E+02   3.7593E-08  1.0032E-06
75  3E+02   1.1278E-07  3.0063E-06
100 1E+00   2.8216E-10  2.0714E-08
100 3E+00   8.4641E-10  6.1573E-08
100 1E+01   2.8214E-09  2.0468E-07
100 3E+01   8.4604E-09  5.4807E-07
100 1E+02   2.8197E-08  1.6292E-06
100 3E+02   8.4587E-08  4.4588E-06

好的,你需要的是回归(参见:Wolfram, Wiki) or aproximation (see: Wiki)。两者的总体思路正是您所需要的:找到一个与您的样本尽可能接近的函数相匹配的函数。

有多种方法,您可以google根据您现在所知道的需要的术语进行组合。

这里有几个简单的例子。请记住,选择一种近似方法很重要并且取决于问题,没有一种方法可以正确地做到这一点。

方法一

您得到了点 P 并想为它找到函数 f 的值。 如果您已经知道此点的 f 值,则 return 它。 否则,找到您知道值的 2^d 点,最接近 P,其中 d 是维度数(函数参数数)。例如,对于 2 个维度((x, y) 点),您会找到最接近 P.

的 4 个点

您计算它们与点 P 之间的距离,并获得 2^d 个值(每个点 1 个),然后计算这些距离的总和。

你计算f(P) = f(point0)*distance(point0)/sumOfDistance + f(point1)*distance(point1)/sumOfDistance + ... f(pointd-1)*distance(pointd-1)/sumOfDistance。结果你得到了这个点附近函数的加权平均值。

方法二

您将某些方程的那些点的误差函数最小化。例如,您可以假设 g(x, y, z) = ax + by + cz + d 可用于描述您的第 4 列。你必须弄清楚这个函数的样子并自己选择它的形式(你可以使用指数函数、对数、多项式等)。然后,您将误差​​函数定义为 e(a, b, c, d) 作为实际值(取自您的数据)与使用 ab、[=25 的 g 值之间的差值之和=], d, squared(我的意思是,差异是平方的,不是a, b, c, d)。 Square 是可选的,但它通常效果更好。现在你所要做的就是最小化函数 e,这意味着 "find values a, b, c, d for which e(a, b, c, d) will be as small as possible".

你是怎么做到的?如果你的函数很简单,你可以微分,找到微分的所有零点,在那些零点计算e的值并选择最小的。 当您的功能非常复杂时,我们遇到了问题。有一种称为(元)启发式的解决方案,在此类任务中非常有用。您可以阅读 evolutionary/genetic 算法(这两个很接近,但不相同)、粒子群优化、禁忌搜索、模拟退火等启发式算法。我不会在这里描述它们,这是至少一门计算机科学硕士课程的主题。

图书馆呢?

嗯...我不太确定是否有类似的东西,但如果有,我猜你会在 numpy or scipy 中找到它。如果没有,手动实现是完全可行的,尽管你必须谨慎并很好地测试它(此类任务中的错误很难找到)。