我需要这个Matlab 函数的精确 Python 等效函数来插值矩阵。
在 Matlab 中,我有:
interp2(X, Y, Z, XI, YI)
在 Scipy 中,我有:
interp2d(X, Y, Z).
在 Scipy XI 和 YI 中丢失了。我该如何解决这个问题?我在 Matlab 中使用所有参数。
我需要这个Matlab 函数的精确 Python 等效函数来插值矩阵。
在 Matlab 中,我有:
interp2(X, Y, Z, XI, YI)
在 Scipy 中,我有:
interp2d(X, Y, Z).
在 Scipy XI 和 YI 中丢失了。我该如何解决这个问题?我在 Matlab 中使用所有参数。
正确的语法是ip = interp2d(x, y, z); zi = ip(xi, yi)
.
另外,interp2d
不完全一样interp2
。RectBivariateSpline更接近。
对于 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
我遇到了同样的问题,并发现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)
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))