Python数据集的插值

时间:2015-05-21 13:16:04

标签: python interpolation

有谁知道如何使用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

1 个答案:

答案 0 :(得分:1)

好的,您需要的是回归(请参阅:WolframWiki)或aproximation(请参阅:Wiki)。两者的一般概念正是您所需要的:找到一个与您的样本尽可能接近的函数匹配的函数。

有几种方法,您可以将它们谷歌起来,因为您现在知道所需的条款。

以下是几个简单的例子。请记住,选择一种aproximating方式很重要且依赖于问题,没有一种方法可以正确地执行此操作。

方法1

您已获得点P,并希望为其找到函数f的值。 如果您已经知道此点f的值,则返回它。 否则,找到您知道最接近2^d的{​​{1}}个点,其中P是维数(函数参数的数量)。例如,对于2维((x,y)点),您可以找到距离d最近的4个点。

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

您计算2^d。结果,你得到了关于这一点的函数的加权平均值。

方法2

对于某些等式,您最小化这些点的误差函数。例如,您可以假设f(P) = f(point0)*distance(point0)/sumOfDistance + f(point1)*distance(point1)/sumOfDistance + ... f(pointd-1)*distance(pointd-1)/sumOfDistance可用于描述您的第4列。你必须弄清楚这个函数是什么样子并自己选择它的形式(你可以使用指数函数,对数,polinomials等)。然后,您将错误函数定义为g(x, y, z) = ax + by + cz + d,将实际值(取自您的数据)与e(a, b, c, d)的值之间的差值之和定义为ga,{{1 },b,平方(我的意思是,差异是平方的,不是cdab)。 Square是可选的,但通常效果更好。现在,您所要做的就是最小化函数c,这意味着"找到deab的值{{ 1}}将尽可能小"。

你是怎么做到的?如果你的功能很简单,你可以区分它,找到差分的全零,在这些零点计算c的值并选择最小值。 当你的功能相当复杂时,我们遇到了问题。有一种叫做(meta)启发式的解决方案,它在这样的任务中非常有用。您可以阅读有关诸如进化/遗传算法(这两者是接近但不相同)的启发式,粒子群优化,禁忌搜索,模拟退火等。我不会在这里描述它们,这是至少一门计算机科学硕士课程的主题。

图书馆怎么样?

嗯......我不确定是否有这样的东西,但是如果有的话,我的猜测是你会在numpyscipy找到它。如果不是,那么手工实施是非常可行的,尽管你必须谨慎并且测试得非常好(这些任务中的错误非常难以找到)。