Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python scipy.interpolate.LinearNDInterpolator未产生所需功能_Python_Scipy_Multidimensional Array_Linear Interpolation - Fatal编程技术网

Python scipy.interpolate.LinearNDInterpolator未产生所需功能

Python scipy.interpolate.LinearNDInterpolator未产生所需功能,python,scipy,multidimensional-array,linear-interpolation,Python,Scipy,Multidimensional Array,Linear Interpolation,我无法使用LinearNDInterpolator获得所需的2D线性插值功能。下面的代码试图在4个节点(0,0)、(1,0)、(0,1)、(1,1)之间进行插值。interp2d为我提供了预期的(线性插值)结果,但LinearNDInterpolator正在执行其他操作,我无法理解。也许我没有正确使用API。不幸的是,我找不到关于使用的详细文档。有没有人能帮我或者给我指个合适的论坛(mathoverflow?)给我写信 >>> f = interp2d([0,1,0,1], [

我无法使用LinearNDInterpolator获得所需的2D线性插值功能。下面的代码试图在4个节点(0,0)、(1,0)、(0,1)、(1,1)之间进行插值。interp2d为我提供了预期的(线性插值)结果,但LinearNDInterpolator正在执行其他操作,我无法理解。也许我没有正确使用API。不幸的是,我找不到关于使用的详细文档。有没有人能帮我或者给我指个合适的论坛(mathoverflow?)给我写信

>>> f = interp2d([0,1,0,1], [0,0,1,1], [0,1,2,4])
>>> f(0.5,0.5)
array([ 1.75])
>>> g = LinearNDInterpolator([[0,0],[1,0],[0,1],[1,1]], [0,1,2,4])
>>> g(0.5,0.5)
array(2.0)
发件人:

插值是通过使用Qhull[R15]对输入数据进行三角剖分,并在每个三角形上执行线性重心插值来构造的


在您的例子中,所选三角形似乎共享
(0,0)、(1,1)
边。由于
(0.5,0.5)
介于
(0,0)
(1,1)
之间,插值位于这些顶点的值之间,因此它是
(0+4)/2=2.0
,,因为四个输入点是共圆的,所以基础的Delaunay三角剖分不明确;您可能会得到一条从(0,0)到(1,1)的“边”,或者一条沿着“另一条对角线”,从(1,0)到(0,1)

在第一种情况下,(0.5,0.5)的插值将产生2.0,在后一种情况下将产生1.5。你无法控制你得到的是哪一个

如果需要该控件,您有两个选项:

1) 通过给插值器一个看起来像Delauney三角剖分返回的对象,明确地提供三角剖分

2) “轻推”你的一个角朝向中心。例如,使用(0.99999,0.99999)代替(1,1);这将“强制”Delaunay三角剖分以确定结果。(在这种情况下,它将“强制”在另一条对角线上使用(0,0)到(0.99999,0.99999)段。)

而且,FWIW,我认为这两个可能值(1.5和2.0)的平均值是你在使用双线性插值时观察到的,这不是巧合;我认为这在数学上是意料之中的