有谁知道如何使用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
答案 0 :(得分:1)
好的,您需要的是回归(请参阅:Wolfram,Wiki)或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)
的值之间的差值之和定义为g
,a
,{{1 },b
,平方(我的意思是,差异是平方的,不是c
,d
,a
,b
)。 Square是可选的,但通常效果更好。现在,您所要做的就是最小化函数c
,这意味着"找到d
,e
,a
,b
的值{{ 1}}将尽可能小"。
你是怎么做到的?如果你的功能很简单,你可以区分它,找到差分的全零,在这些零点计算c
的值并选择最小值。
当你的功能相当复杂时,我们遇到了问题。有一种叫做(meta)启发式的解决方案,它在这样的任务中非常有用。您可以阅读有关诸如进化/遗传算法(这两者是接近但不相同)的启发式,粒子群优化,禁忌搜索,模拟退火等。我不会在这里描述它们,这是至少一门计算机科学硕士课程的主题。
图书馆怎么样?
嗯......我不确定是否有这样的东西,但是如果有的话,我的猜测是你会在numpy或scipy找到它。如果不是,那么手工实施是非常可行的,尽管你必须谨慎并且测试得非常好(这些任务中的错误非常难以找到)。