python实现matlab中interp2方法(有误差(小数点后第5位))

在matlab中的interp2方法

lat = ds1.data('lat')'; % 1x451 90:-0.4:-90
lon = ds1.data('lon')'-360; % 1x900 -180:0.4:179.6

%% 插值,从0.4度分辨率插值到0.125度
% 转换后
%lat 90:-0.125:-90 1x1441
%lon 0:0.125:359.875 1x2880
%U: 2880x1441 lon x lat

lat1 = 90:-0.125:-90; %1x1441
lon1 = 0:0.125:359.875; %1x2880
[LAT,LON] = meshgrid(lat,lon);
[LAT1,LON1] = meshgrid(lat1,lon1);
U1 = interp2(LAT,LON,U,LAT1,LON1); %lon x lat 2880x1441

 如图:

在pyhon中实现

import numpy as np
from scipy import interpolate

#将矩阵的行进行倒叙
def invert(list1):
    return np.squeeze([row[::-1] for row in list1])




#示例
def test
    U = []#矩阵
    lat = np.transpose(ds['lat'].data)# 1x451 90:-0.4:-90
    lon = np.transpose(ds['lon'].data) # 1x900 -180:0.4:179.6

    lat1 = np.arange(90, - 90 + - 0.125, - 0.125)
    lon1 = np.arange(0, 359.875 + 0.125, 0.125)
    #lat、lon、lat1、lon1在interp2d方法下实现插值,但是行的顺序是颠倒的
    f = interpolate.interp2d(lat, lon, U)
    U1 = f(lat1, lon1)
    #将矩阵行中数据颠倒过来,就得到和matlab中和interp2d保持一致的数据了
    re= invert(U1)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值