1

我沒有得到期望的LinearNDInterpolator二維線性插值功能。下面這段代碼試圖在4個結點(0,0),(1,0),(0,1),(1,1)之間進行插值。 interp2d給了我預期的(線性插值)結果,但LinearNDInterpolator正在做其他事情,我無法弄清楚。也許我沒有正確使用API​​。不幸的是,我找不到有關使用情況的詳細文檔。有人可以幫助或指向我的正確的論壇(mathoverflow?)寫信給?scipy.interpolate.LinearNDInterpolator不產生所需的功能

>>> 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) 

回答

1

由於您的四個輸入點是共同循環的,所以下面的Delaunay三角測量是不明確的; (0,0)到(1,1)的「邊緣」或沿着「其他對角線」從(1,0)到(0,1)的一個邊緣。

在第一種情況下,(0.5,0.5)的插值將產生2.0,在後一種情況下,它將產生1.5。你無法控制你得到哪一個。

如果你想要的控制,你有兩個選擇:

1)通過給插值的對象,看起來像一個由德勞內三角化返回明確供應三角測量。

2)「推動」你的一個角落向中心。例如,使用(0.99999,0.99999)而不是(1,1);這將「強制」Delauney三角測量到確定性的結果。 (在這種情況下,它將「強制」使用(0,0)到(0.99999,0.99999)段而不是另一個對角線。)

而且,FWIW,我認爲這並非巧合,這兩個可能的值(1.5和2.0)是您在使用雙線性插值時觀察到的值;我認爲這是數學上的預期。