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)

原始数据z

plt.imshow(znew)

插值后的数据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)

直接画图有:
转换了x的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)

转换了xnew之后的插值数据znew图像
应该就是不管设定的坐标顺序是怎样,查之后的结果都是按照坐标从小到大排列的。
如果是用于地理信息数据的插值的时候要注意。

  • 9
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值