【问题标题】:MATLAB interp2 function in PythonPython中的MATLAB interp2函数
【发布时间】:2012-07-15 06:46:38
【问题描述】:

我需要一个与 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)

【问题讨论】:

    标签: python matlab scipy linear-algebra interpolation


    【解决方案1】:

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

    print(ip.ev(15, 1975))

    更新:

    很容易调整。并盯着我的脸。可以设置kx和ky的值,即二元样条的度数See documentation here

    不管怎样,只要把线调整为:

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

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

    【讨论】:

    • 好的,我明白了,现在我已将您的代码插入到 python 中。如果下次抛出错误时包含整个回溯会更好。待会儿我再来看看。
    • 不用担心。我在我的答案中抛出了一个更新,希望能在这里修复你。
    • 它确实有效,但为什么呢?无论如何,结果(160.12)与 MATLAB(190.6288)中的结果不同,我想它必须如此。还是不行?
    • 尝试在 matlab 的 interp2 函数中使用 'cubic' 作为修饰符,我敢打赌你会在 160.12 左右得到正确的结果
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      我也遇到了同样的问题,发现scipy.ndimage.map_coordinatesVq = 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,感谢您的提醒!请尝试此解决方案,希望对您的问题有所帮助!
      猜你喜欢
      • 1970-01-01
      • 2021-02-27
      • 2019-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-13
      • 2018-03-23
      相关资源
      最近更新 更多