【问题标题】:interp2(X, Y, Z, XI, YI) from Matlab to Pythoninterp2(X, Y, Z, XI, YI) 从 Matlab 到 Python
【发布时间】:2012-07-13 04:18:00
【问题描述】:

我需要这个 Matlab function 的确切 Python 等效函数来插值矩阵。

在 Matlab 中我有:

interp2(X, Y, Z, XI, YI) 

在 Scipy 中我有:

interp2d(X, Y, Z). 

在 Scipy XI 和 YI 中缺失。我该如何解决这个问题?我正在使用 Matlab 中的所有参数。

【问题讨论】:

    标签: python matlab scipy interpolation


    【解决方案1】:

    对于 interp2(v,xq,yq)

    ip = scipy.interpolate.griddata((y.ravel(),x.ravel()),distorted.ravel(),(yq.ravel(),xq.ravel()))
    

    请注意,返回的结果需要调整大小。即(ip.resize(img.shape))

    这里是y,x

    x,y = np.meshgrid(np.arange(w),np.arange(h))
    

    其中w,h分别是图片的宽度和高度。

    有关更多信息,您可以阅读 griddata 文档。 https://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.griddata.html

    对于 interp2(X,Y,V,Xq,Yq),只需将 x,y 替换为 X,Y

    【讨论】:

      【解决方案2】:

      Interp2d 输出另一个函数,允许您调用 Xi 和 Yi。但是,当心!它将它们评估为矩阵,而不是标量。您必须使用 for 循环分别计算 Xi 和 Yi 的每对值,并获得与 MATLAB 相同的行为。

      F=interpolate.interp2d(X,Y,Z)
      Zi=[]
      for i, j in zip(Xi,Yi)
         Zi.append(F(i,j))
      

      【讨论】:

      • 是否有另一种更直接的方法来获取向量而不是使用for 循环?
      • 好的,我找到了解决方案。可以得到F(Xi,Yi)的对角线,就得到了最终向量。
      【解决方案3】:

      我也遇到了同样的问题,发现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)
      

      【讨论】:

        【解决方案4】:

        正确的语法是ip = interp2d(x, y, z); zi = ip(xi, yi)。

        另外,interp2d 与 interp2 并不完全相同。 RectBivariateSpline 更近了。

        【讨论】:

        • 嘿pv,我应该使用什么函数来绘制闭合曲线或轮廓? RectBivariateSpline 希望点按升序排列,这在轮廓的情况下会失败。
        • @Gunjan 你找到解决方案了吗?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-04-19
        • 2012-11-18
        • 1970-01-01
        • 1970-01-01
        • 2013-02-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多