TJLHg
TJLHg
采纳率66.7%
2021-03-23 13:16 阅读 142

如何使用Python将0.25度乘0.25度的气象数据统一为0.5度乘0.5度的气象数据?

20

我使用的数据为ERA5数据的2米气温【t2m】(附下载链接:https://cds.climate.copernicus.eu/cdsapp#!/dataset/reanalysis-era5-single-levels-monthly-means?tab=overview),使用Python语言进行处理。ERA5的2米气温数据经纬度分辨率为0.25度乘0.25度,按照工作要求,需要把分辨率降为0.5度乘0.5度,因为Python接触时间不长,我使用的方法为(如下面代码所示)

from netCDF4 import Dataset
from mpl_toolkits.basemap import Basemap
import numpy as np
import matplotlib.pyplot as plt

file = 'G:\\Data\\TP_and_2mT_1979-2019_Monthly.nc'
a = Dataset(file)

lon = a.variables["longitude"][:]
lon = lon[::2]
lat = a.variables["latitude"][:]
lat = lat[::2]
t2m = a.variables["t2m"][:]
t2m = t2m[-1]
num = 1
for i in range(720):
    t2m = np.delete(t2m, num, axis=1)
    num = num + 1
t2m = t2m - 273.15
t2m1 = np.zeros([361, 720])

lon0 = lon.mean()
lat0 = lat.mean()
m = Basemap(lat_0=lat0, lon_0=lon0)
m.drawparallels(np.arange(-90., 91., 10.), labels=[1, 0, 0, 0], fontsize=5)
m.drawmeridians(np.arange(-180., 181., 20.), labels=[0, 0, 0, 1], fontsize=5)
m.drawcoastlines()
lon1, lat1 = np.meshgrid(lon, lat)
xi, yi = m(lon1, lat1)

for i in range(361):
    for j in range(720):
        t2m1[i, j] = t2m[i, j]

m1 = m.contourf(xi, yi, t2m1, 300, cmap='jet')
Tu_li = m.colorbar(m1, location='bottom', pad="10%")
plt.savefig('G:\\Data_dispose\\Text10', dpi=300)

思路为,使用列表的操作方法,将经纬度隔行隔列取,这样就去掉了一半的经纬度数据,将0.25度分辨率变为0.5度,同时用处理数组的方法,也将气温数据隔行隔列取但是操作的结果出现很大的差错(如生成图)

之后不知道该如何处理,想请教一下大家,我的编程思路有什么错误,或者大家有什么更好的方法处理这个问题,小白向大佬们求教。时间紧张,谢谢大家了。

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

5条回答 默认 最新

  • 已采纳
    qq_22475211 深白色的风 2021-03-23 14:11
    for i in range(361):
    
    
    
        t2m = np.delete(t2m, num, axis=0)
    
    
    
        num = num + 1

    第18行之后加个循环处理掉纬度上的多余数据

    点赞 1 评论 复制链接分享
  • qq_22475211 深白色的风 2021-03-23 14:04

    你实际操作的时候只是去掉了经度上得一半数据,纬度上的一半数据没有去掉?你看情况是不是这样的。望采纳

    点赞 1 评论 复制链接分享
  • qq_22475211 深白色的风 2021-03-23 14:07

    这这是把北半球的数据覆盖到全球了

    点赞 1 评论 复制链接分享
  • soar3033 soar3033 2021-03-23 14:14

    你这样还不如把你的数据集放百度网盘上,你这样让大家现去网站注册下载数据集吗

    点赞 评论 复制链接分享
  • xufive 天元浪子 2021-03-23 17:30

    从netcdf读出的lon和lat数组应该是二维的经纬度网格吧?要是能print一下lon.shap、lat.shape、t2m.shape,这个代码就很容易读了。lon[::2]应该写成lon[::2,::2],同样,纬度数组也应如此。另外31-33行想要做什么?直接使用t2m不可以吗?

    点赞 评论 复制链接分享

相关推荐