2016-02-12 91 views
1

我有以下代碼試圖插值空氣溫度值爲什麼改變一個值不會改變Scipy Spline的值?

import numpy as np 
from scipy.interpolate import RectBivariateSpline as spline 

x = np.array([-7.52, -7.50, -7.48, -7.46]) 
y = np.array([41.88, 41.90, 41.92, 41.94]) 
z = np.array([ 
    [1.2, 1.1, 1.5, 1.3], 
    [1.3, 1.4, 1.5, 1.1], 
    [1.2, 1.1, 1.2, 1.6], 
    [1.3, 1.1, 1.2, 1.5] 
    ]) 
f = spline(x, y, z) 

當我打電話與f.ev(41.89, -7.46)函數的值保持不變[ 1.3],甚至當我改變z的值。你可以幫幫我嗎?

回答

0

你創造改變z值後,一個新的f對象?顯然f正在使用z的副本,而不是z本身。您需要更新評估者,看看更改z的影響。

如果需要,我可以添加一個演示。


In [373]: x = np.array([-7.52, -7.50, -7.48, -7.46]) 
In [374]: y = np.array([41.88, 41.90, 41.92, 41.94]) 
In [375]: z = np.array([ 
    .....:  [1.2, 1.1, 1.5, 1.3], 
    .....:  [1.3, 1.4, 1.5, 1.1], 
    .....:  [1.2, 1.1, 1.2, 1.6], 
    .....:  [1.3, 1.1, 1.2, 1.5] 
    .....:  ]) 
In [376]: f=interpolate.RectBivariateSpline(x,y,z) 

In [378]: f(41.89,-7.46) 
Out[378]: array([[ 1.3]]) 
In [379]: f.ev(41.89,-7.46) 
Out[379]: array(1.3) 

In [381]: z+=2 
In [382]: z 
Out[382]: 
array([[ 3.2, 3.1, 3.5, 3.3], 
     [ 3.3, 3.4, 3.5, 3.1], 
     [ 3.2, 3.1, 3.2, 3.6], 
     [ 3.3, 3.1, 3.2, 3.5]]) 
In [383]: f.ev(41.89,-7.46) 
Out[383]: array(1.3) 
In [384]: f=interpolate.RectBivariateSpline(x,y,z) 
In [385]: f.ev(41.89,-7.46) 
Out[385]: array(3.3000000000000003) 
+0

是的。我改變z的硬編碼值,保存並再次運行腳本。 – Hugo

+0

可能我的問題是關於樣條線如何工作而不是關於python實現 – Hugo

相關問題