我需要对包含'n'
独立变量和因变量的数据执行线性插值。我目前使用scipy.interpolate.LinearNDInterpolator
来执行插值。但是,当通过将(变量的)所有值与常数相乘来更改数据集的范围时,插值后的结果完全改变。scipy结果线性插值结果不一致
让我说明这一个具体的例子:
X = [[0.00000000e+00, 1.00000000e+00], [0.00000000e+00, 8.00000000e+00], [0.00000000e+00, 1.60000000e+01], [0.00000000e+00, 3.20000000e+01],
[0.00000000e+00, 6.40000000e+01], [0.00000000e+00, 1.28000000e+02], [1.00000000e-06, 1.00000000e+00], [1.00000000e-06, 8.00000000e+00],
[1.00000000e-06, 1.60000000e+01], [1.00000000e-06, 3.20000000e+01], [1.00000000e-06, 6.40000000e+01], [1.00000000e-06, 1.28000000e+02],
[1.00000000e-06, 2.56000000e+02], [1.00000000e-06, 5.12000000e+02], [1.00000000e-05, 1.00000000e+00], [1.00000000e-05, 8.00000000e+00],
[1.00000000e-05, 1.60000000e+01], [1.00000000e-05, 3.20000000e+01], [1.00000000e-05, 6.40000000e+01], [1.00000000e-05, 1.28000000e+02],
[1.00000000e-05, 2.56000000e+02], [1.00000000e-05, 5.12000000e+02], [1.00000000e-04, 1.00000000e+00], [1.00000000e-04, 8.00000000e+00],
[1.00000000e-04, 1.60000000e+01], [1.00000000e-04, 3.20000000e+01], [1.00000000e-04, 6.40000000e+01], [1.00000000e-04, 1.28000000e+02],
[1.00000000e-04, 2.56000000e+02], [1.00000000e-04, 5.12000000e+02], [1.00000000e-03, 1.00000000e+00], [1.00000000e-03, 8.00000000e+00],
[1.00000000e-03, 1.60000000e+01], [1.00000000e-03, 3.20000000e+01], [1.00000000e-03, 6.40000000e+01], [1.00000000e-03, 1.28000000e+02],
[1.00000000e-02, 1.00000000e+00], [1.00000000e-02, 8.00000000e+00], [1.00000000e-02, 1.60000000e+01], [1.00000000e-02, 3.20000000e+01],
[1.00000000e-02, 6.40000000e+01], [1.00000000e-02, 1.28000000e+02]]
y = [0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 6.99000000e-17, 5.60000000e-16, 1.12011400e-15, 2.24034300e-15,
4.48080000e-15, 7.56193140e-14, 2.17896343e-13, 5.02450401e-13, 6.99000000e-16, 5.60000000e-15, 1.12011430e-14, 2.24034290e-14, 4.48080000e-14, 8.96171430e-14,
1.79235429e-13, 3.58472001e-13, 6.99000000e-15, 5.60000000e-14, 1.12011429e-13, 2.24034286e-13, 4.48080000e-13, 8.96171429e-13, 1.79235429e-12, 3.58472000e-12,
6.99000000e-14, 5.60000000e-13, 1.10000000e-12, 2.20000000e-12, 4.50000000e-12, 9.00000000e-12, 6.99000000e-13, 5.60000000e-12, 1.12000000e-11, 2.24000000e-11,
4.48000000e-11, 8.95000000e-11]
当我执行了价值[7.10000000e-05, 18]
我得到的结果7.95281146e-14
插值。如果我将第一列乘以10^3
,结果列乘以10^12
,那么我得到的结果是完全不同的。我得到0.09352
这相当于9.352e-14
。
- 有人可以指出为什么scipy在这些情况下给出不同的结果吗?
- 以下哪些结果是正确的? (我尝试使用Excel,但我很快意识到,scipy使用不同的技术)。
- 我该如何解决这个问题?
通过乘以'第一列'和结果列,你的意思是什么? – Boud 2013-05-07 09:03:07
X的第一列的数据在1e-6到1e-2的范围内(如果排除零)。通过将该列的元素乘以10^3,该范围被改变为1e-3至1e + 1。同样,y的所有元素都乘以10^+ 12。 – varadark 2013-05-07 09:04:11
'LinearNDInterpolator'使用Delaunay三角剖分法对数据点位置(此处为“X”)进行三角测量,然后使用每个三角形三个点中每个点处的数据对每个三角形内部进行线性插值。 Delaunay三角测量对数据点位置很敏感。如果您缩放其中一个位置坐标的方式不同于另一个,则不会得到相同的三角剖分。因此,你试图插入的位置将从不同的三点获得'y'数据。 – 2013-05-07 14:57:27