将Matlab中的interp2(X, Y, Z, XI, YI)翻译成Python。

6

我需要一个在Python中与这个Matlab函数完全等价的函数,以便对矩阵进行插值。

在Matlab中,我的函数如下:

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

在Scipy中我有:

interp2d(X, Y, Z). 

在Scipy中没有XI和YI。我该怎么解决呢?我在Matlab中使用所有参数。
5个回答

5
正确的语法是ip = interp2d(x, y, z); zi = ip(xi, yi)。另外,interp2d并不完全等同于interp2RectBivariateSpline更接近。

嘿pv,闭合曲线或轮廓应该使用什么函数?RectBivariateSpline需要点按升序排列,对于轮廓则失败了。 - Gunjan naik
@Gunjan,你解决了吗? - makarand kulkarni
是的,它是interp2d函数。 - Gunjan naik

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

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


0

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”循环? - ttsesm
好的,我找到了解决方法。你可以得到 F(Xi,Yi) 的对角线,然后你就有了最终的向量。 - ttsesm

0
只是想亲自发表一下意见,因为我也在努力寻找Python版本的MATLAB代码。
[X, Y] = meshgrid(x, y')
[XI, YI] = meshgrid(xi, yi')

Vq = interp2(X, Y, Z', XI, YI)
coeff = diag(Vq)'

在我的特定情况下,MATLAB变量和大小如下:
- x和y:分别为(m x 1)和(1 x n)。 - xi和yi:都是(1 x w)大小。 - X和Y:是我的样本点的(m x n)网格。 - Z:是我的相应函数值的(n x m)数组(在函数中进行了转置)。 - XI和YI:都是我的查询点的(w x w)网格。 - coeff:是插值系数的(1 x w)数组。
我尝试了scipy.interpolate.RectBivariateSpline,并成功获得了与MATLAB代码完全相同的结果。只是有点棘手,因为文档有点令人困惑,但关键是使用.ev方法。Python代码如下:
from scipy.interpolate import RectBivariateSpline

# NOTE: The x, y, xi, and yi arrays are kept 1-dimensional, and not converted to meshgrids.

interp = RectBivariateSpline(x, y, Z, kx=1, ky=1)
coeff = interp.ev(xi, yi)

这段代码应该会给你与MATLAB代码完全相同的结果,其中我的Python变量的大小如下:

  • xy:分别为(m,)和(n,)。
  • Z:为(m x n)的矩阵,与MATLAB中的矩阵转置相同。
  • xiyi:两个变量都是(w,)的形状。
  • coeff:为(w,)。

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