Python中的MATLAB interp2函数

3
我需要一个Python等效的interp2 MATLAB函数。我正在尝试让这个MATLAB示例在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)
3个回答

1

我认为您需要使用以下行调用ip以返回一个值,而不是使用您的打印行。

print(ip.ev(15, 1975))

更新:

非常简单的调整。它一直在我的眼前。您可以设置kx和ky的值,它们是双变量样条请参见此处的文档

无论如何,只需调整行:

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

如果您不想调整kx,则不需要调整kx。如果将kx保留为3,则我怀疑它不会对插值产生太大影响。


好的,我现在已经将你的代码插入到我的Python中了。下次发生错误时,最好包含整个回溯信息。稍后我会再看一眼。 - Ben A.
没问题。我在我的答案中加入了一个更新,希望能够解决你的问题。 - Ben A.
它确实有效,但为什么呢?无论如何,结果(160.12)与MATLAB中的结果(190.6288)不同。我想它必须这样。或者不是吗? - blueSurfer
尝试在Matlab的interp2函数中使用“cubic”作为修饰符,我敢打赌你会得到大约160.12。 - Ben A.

0

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


0
我遇到了同样的问题,并发现scipy.ndimage.map_coordinates与Vq = interp2(V, Xq, Yq)相同。请阅读这些命令的文档,找出您的情况的解决方案。
为Matlab的Vq = interp2(V,Xq,Yq)尝试这个:
Vq = scipy.ndimage.map_coordinates(V, [Xq.ravel(), Yq.ravel()], order=3, mode='nearest').reshape(V.shape)

欢迎来到 Stack Overflow!请删除链接并改进您的答案,使其包含该链接中包含的信息,即使这是您自己的答案之一。请在链接的答案上也这样做。 - Antoine
嗨,Antoine,谢谢你的提醒!请尝试这个解决方案,希望它能解决你的问题! - Elektrone Motyo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接