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)
plt.imshow(znew)
变化说明
如果把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)
直接画图有:
但是如果把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)
应该就是不管设定的坐标顺序是怎样,查之后的结果都是按照坐标从小到大排列的。
如果是用于地理信息数据的插值的时候要注意。