5

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

在 Matlab 中,我有:

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

在 Scipy 中,我有:

interp2d(X, Y, Z). 

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

4

4 回答 4

4

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

另外,interp2d不完全一样interp2RectBivariateSpline更接近。

于 2012-07-13T10:54:06.800 回答
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,yX,Y

于 2021-07-09T19:53:10.037 回答
1

我遇到了同样的问题,并发现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)
于 2017-05-08T14:40:41.453 回答
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))
于 2019-05-01T22:30:52.357 回答