Python中的MATLAB interp2函数

时间:2012-07-16 12:09:05

标签: python matlab scipy linear-algebra interpolation

我需要一个等效于 interp2 MATLAB函数的Python。我试图让这个MATLAB example在Python中工作,但我不能。

import numpy as np

from scipy.interpolate import interp2d
from scipy.interpolate import RectBivariateSpline

service = np.array(range(10, 31, 10))
years = np.array(range(1950, 1991, 10))

wage = np.array([[150.6970,199.5920,187.6250],
    [179.3230, 195.0720, 250.2870],
    [203.2120, 179.0920, 322.7670],
    [226.5050, 153.7060, 426.7300],
    [249.6330, 120.2810, 598.2430]])

ip = RectBivariateSpline(years, service, wage)

print(ip(15, 1975))

但是我得到了这个错误(在RectBivariateSpline中),我无法解决:

    Traceback (most recent call last):
  File "/Users/andrea/Documents/workspace/PythonProjects/pyArmBot/src/foo.py", line 15, in <module>
    ip = RectBivariateSpline(years, service, wage)
  File "/Library/Python/2.7/site-packages/scipy-0.10.1-py2.7-macosx-10.7-intel.egg/scipy/interpolate/fitpack2.py", line 728, in __init__
    kx,ky,s)

2 个答案:

答案 0 :(得分:1)

我相信您需要通过使用以下行而不是打印行来调用ip来返回值。

print(ip.ev(15, 1975))

更新

非常容易调整。并且正盯着我的脸。您可以设置kx和ky的值,它们是双变量样条线的度数See documentation here

无论如何,只需将线调整为:

ip = RectBivariateSpline(years, service, wage, kx=2, ky=2)

如果您不想,则无需调整kx。如果你把kx保留为3,我怀疑它会改变插值。

答案 1 :(得分:0)

blueSurfer,我认为你设置插值的方式,正确的结果将由ip(1975, 15)获得,而不是相反。