我需要對包含'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