首页 > 编程知识 正文

python批量裁剪

时间:2023-05-05 08:20:41 阅读:204477 作者:3811

​教程照片及其他详细信息请关注微信公众号:夫也的笔记
公众号内容包含:ArcGIS、ENVI、MATLAB、Python和R语言教程和实际案例分享

理论知识:CMIP是国际耦合模式比较计划(Coupled Model Intercomparison Project)的缩写,最早是在1995年由世界气候研究计划(WCRP)下属的耦合模式工作组(WGCM)主持开展的。自CMIP诞生以来,一直致力于促进气候模式的发展和完善,并支持气候变化的评估和预估工作。目前已开展了5次耦合模式比较计划,当前正在进行的是第6次耦合模式比较计划,即CMIP6。基于CMIP计划的气候变化研究,是气候评估和谈判的重要基础,也为IPCC气候变化评估报告的撰写提供了参考价值。美国劳伦斯利弗莫尔国家实验室(LLNL)的气候模式诊断和比较计划项目(PCMDI)多年来一直对CMIP计划提供支持,包括确定该计划的Scope,提供下载的平台等。目前,CMIP6数据的下载仍主要由LLNL支持的网站获取。WCRP的大科学挑战(WCRP2016)是发起和组织CMIP计划的重要科学背景。描述CMIP6试验设计和组织的文章发表于2016年(Erying et al. 2016),此后在2018年CMIP6共批准了23个子计划。这些标准的气候模拟比较计划,主要着眼于三个关键科学问题:
(1)地球系统如何响应外强迫;
(2)当前气候模式的系统性偏差产生的原因及其影响;
(3)在气候系统内部变率、可预报性和未来预估情景不确定的情况下如何对未来气候变化进行预估。

CMIP6计划的试验设计有三个层次

(1)核心的DECK试验。DECK是气候诊断、评估和描述(Diagnostic,Evalutationand Charcaterization of Klima)的缩写。DECK试验是CMIP计划的入门试验,任何完成DECK试验并参与国际共享的模式,即被认为参与了CMIP计划。
(2)第二级的历史气候模拟试验(historical试验)。historical试验是CMIP6计划的入门试验,任何完成historical试验并参与国际共享的模式,即被认为参与了CMIP6计划。
(3)在两级入门试验的外层是CMIP6的23个模拟比较子计划(MIPs)。

多线程下载和预裁剪代码

from urllib.request import Request, urlopenfrom io import BytesIOfrom multiprocessing.dummy import Poolfrom os.path import existsimport jsonfrom datetime import datetimeimport xarrayfrom get_url import nc_urls​threads = 10lon_w, lon_e = 70, 140lat_s, lat_n = 15, 55save_to = r'./cmip6_china_monthmean'base_headers = { 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) ' 'AppleWebKit/537.36 (KHTML, like Gecko) ' 'Chrome/74.0.3729.131 Safari/537.36', 'Connection': 'Keep-Alive'}pool = Pool(threads)lon_slice = slice(lon_w, lon_e)lat_slice = slice(lat_s, lat_n)def worker(info): nc_url, pos_start, pos_end, n, cache = info headers = {**base_headers, 'range': f'bytes={pos_start}-{pos_end}'} while True: try: cache[n] = urlopen(Request(nc_url, headers=headers), timeout=5).read() return except Exception as e: continue subsize = nc_bytes // threads worker_info = [[nc_url, x*subsize, (x+1)*subsize-1, x, cache] for x in range(threads)] worker_info[-1][2] = nc_bytes - 1 pool.map(worker, worker_info) print(f'{datetime.now()}下载完成') f = BytesIO(b''.join(cache)) del cache f.seek(0) ds = xarray.open_dataset(f).sel(lon=lon_slice, lat=lat_slice) ds = ds.groupby(ds.time.astype('datetime64[M]')).mean() ds.to_netcdf(f'{save_to}/{nc_name[:-3]}_china_monthmean.nc') print(f'{datetime.now()}处理完成') del ds, f done[nc_name] = nc_url with open(done_json, 'w') as f: json.dump(done, f, indent=4)pool.close()pool.join()

还有一种下载方法
请关注微信公众号:夫也的笔记。进行查看

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。