python插值方法scipy.interpolate.interp2d注意事项

python插值方法scipy.interpolate.interp2d注意事项

python插值方法scipy.interpolate.interp2d注意事项

问题

在使用scipy.interpolate.interp2d对数据插值时,发现输出的数据图像并不相同,然后找了一下原因。
坐标用的是经纬度数据,粗细的纬度数据都是从60~-60这样排列的,原因应该就是插值完的输出坐标应该都是从小到大排序(即从负到正),因此导致不同。

scipy.interpolate.interp2d的使用

scipy.interpolate.interp2d官方文档:https://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.interp2d.html#scipy.interpolate.interp2d
例子如下:

import numpy as np
import matplotlib.pyplot as plt
from scipy import interpolate

x = np.arange(-3.01, 5.01, 0.25)
y = np.arange(-1.01, 5.01, 0.25)
xx, yy = np.meshgrid(x, y) #建立原始坐标
z = np.sin(xx**2+yy**2) #建立原始数据
f = interpolate.interp2d(x, y, z, kind='cubic')

xnew = np.arange(5.01, -3.01, -1e-2)
ynew = np.arange(-1.01, 5.01, 1e-2)
znew = f(xnew, ynew) #插值后的数据

展示结果

plt.imshow(z)

python插值方法scipy.interpolate.interp2d注意事项

plt.imshow(znew)

python插值方法scipy.interpolate.interp2d注意事项

变化说明

如果把x换成从正到负的横坐标列:

x = np.arange(5.01, -3.01, -0.25)
y = np.arange(-1.01, 5.01, 0.25)
xx, yy = np.meshgrid(x, y)
z = np.sin(xx**2+yy**2)
plt.imshow(z)

直接画图有:
python插值方法scipy.interpolate.interp2d注意事项
但是如果把xnew换成从正到负的横坐标列,这时产生的znew的横坐标并不与xnew对应,而是从小到大从负到正:

x = np.arange(-3.01, 5.01, 0.25)
y = np.arange(-1.01, 5.01, 0.25)
xx, yy = np.meshgrid(x, y)
z = np.sin(xx**2+yy**2)
f = interpolate.interp2d(x, y, z, kind='cubic')
xnew = np.arange(5.01, -3.01, -1e-2)
ynew = np.arange(-1.01, 5.01, 1e-2)
znew = f(xnew, ynew)
plt.imshow(znew)

python插值方法scipy.interpolate.interp2d注意事项
应该就是不管设定的坐标顺序是怎样,查之后的结果都是按照坐标从小到大排列的。
如果是用于地理信息数据的插值的时候要注意。

上一篇:数据分析常用模块及安装顺序


下一篇:报错ModuleNotFoundError: No module named ‘scipy.spatial.qhull‘