CDO学习2 CDO 入门教程Tutorial
#20210117#注:如果需要用cdo对数据进行截取,可参考buguse的几篇博文:
-------------------------------------------------------------------------------------------------------------
用户手册,参考https://code.mpimet.mpg.de/projects/cdo/embedded/cdo.pdf
本文翻译搬运自https://code.mpimet.mpg.de/projects/cdo/wiki/Tutorial
教程
CDO软件是一个包含大量标准处理气候和预报模式数据的算子的集合。该算子包括简单的统计和算术方程,资料选取和二次抽样,和空间插值。
开发CDO是为了为GRIB [GRIB]和NetCDF [NetCDF]数据集提供相同的处理功能集整合在一个包中。
CDI(气候数据接口)用于快速和文件格式独立访问GRIB和NetCDF数据集。还支持本地MPI-MET数据格式SERVICE,EXTRA和IEG。
GRIB和NetCDF数据集存在一些限制。 GRIB数据集必须一致,类似于NetCDF。 这意味着所有时间步都需要具有相同的变量,并且在一个时间步长内,每个变量只能出现一次。 NetCDF数据集仅支持经典数据模型和最多4维的阵列。 这些尺寸应仅用于水平和垂直网格以及时间。 NetCDF属性应遵循GDT,COARDS或CF约定。
引言
显示所有cdo选项
cdo -h
获得所有操作符有一个简短的声明
cdo -h
得到更多一个运算符的信息
cdo -h <operator>
得到完整信息的最好方法是阅读文档[[https://code.mpimet.mpg.de/projects/cdo/embedded/index.html]]
在开始工作前需要知道数据存储了哪些变量,什么格点,不要忘记查看定义的全局的变量维数属性。
使用'cdo info'命令,您可以看到时间步,层次,最小值,最大值,平均值和缺测值。 输入
cdo -info <infile>
并且使用NCO的ncdump可以显示所有元数据和数据内容。 要显示文件的元数据,请键入
ncdump -h <infile>
基本用法
- 显示文件的变量Display variables of a file
cdo -showname <infile>
- 显示文件的时间步数目Display number of timesteps of a file
cdo -ntime <infile>
- 显示格点信息?Display Information about the underlying grid: griddes does the following:
cdo -griddes tsurf.nc
- 文件转换到不同类型File conversion with different file types: Copying whole data sets can be easily done with the copy operator.
With the '-f' switch, you can choose a new file type:cdo -f grb -copy tsurf.nc tsurf.grb
Combine this with the '-z' options for changing to a higher compression ration:
cdo -f grb -z szip tsurf.nc tsurf.grb
- 选择变量Select variables from file: select variable tas
cdo -selname,tas <infile> <outfile>
select variables u10 and v10
cdo -selname,u10,v10 <infile> <outfile>
- 选择时间步Select timesteps from file: e.g. select only the 3rd time step
cdo -seltimestep,3 <infile> <outfile>
or select 3 timesteps
cdo -seltimestep,1,13,25 <infile> <outfile>
or select a time range from 1 to 12
cdo -seltimestep,1/12 <infile> <outfile>
If you have a list of dates (e.g. format YYY-MM-DD) you can use the select operator:
cdo -select,date=date1,date2,...,dateN <infile> <outfile>
- 选取子区域Select only data of the northern hemisphere (sub-region):
cdo -sellonlatbox,-180,180,0,90 <infile> <outfile>
- 经纬度网格重新排列Rearrange data from longitude 0 to 360 degrees to -180 to 180 degrees (latitude: -90 to 90 degrees):
cdo -sellonlatbox,-180,180,-90,90 <infile> <outfile>
- 经纬度反转Invert the latitudes from north-south to south-north:
cdo -invertlat <infile> <outfile>
- 转换成摄氏度Convert from K to degC when input file contains temperature values:
cdo -addc,-273.15 <infile> <outfile>
and don't forget to change the variable (here tas) units, too. Combining operators:
cdo -setattribute,tas@units="degC" -addc,-273.15 <infile> <outfile>
- 设置缺测值Set constant value to missing value: change data value -999.0 to be missing value
cdo -setctomiss,-999.0 <infile> <outfile>
or vice versa set missing value to constant value:
cdo setmisstoc,0 <infile> <outfile>
- 计算各月的平均Compute the monthly mean with respect to the number of days per month: don't forget to change the units attribute of the variable
cdo -r -setattribute,tas@units="K/day" -divdpm -monsum <infile> <outfile>
- Delete February 29th:
cdo -delete,month=2,day=29 <infile> <outfile>
进行变量修改
可以使用chname,chcode或setattribute等一些CDO运算符修改变量的名称及其属性(元数据)。
要将变量的名称从temp更改为t2m:
cdo -chname,temp,t2m infile outfile
要将代码98更改为179,将代码编号99更改为211:
cdo -chcode,98,179,99,211 infile outfile
要在某些计算后更改变量属性单位:
cdo -setattribute,pressure@units=pascal infile outfile
setattribute运算符接受多个属性,并且它支持通配符,比如:
cdo -setattribute,y?_?@units="degrees_north",x?_?@units="degrees_east",????_a@coordinates="yc_a xc_a",????_b@coordinates="yc_b xc_b" infile outfile
注意!
CDO无法更改坐标(维度)变量名称,但您可以使用NCO的ncrename来完成此操作。
如果要重命名坐标变量以使其保持坐标变量,则必须单独重命名维度和变量。
例如。 将坐标(维度)变量名称从ncl1,ncl2,ncl3重命名为time,lat,lon:
ncrename -d ncl1,time -d ncl2,lat -d ncl3,lon -v ncl1,time -v ncl2,lat -v ncl3,lon infile outfile
运算符组合
具有一个输出流的所有运算符可以将结果直接传递给另一个运算符。 运算符必须使用“ - ”开头才能与其他运算符组合。 这可以通过以下方式改善性能:
- 减少不必要的磁盘I / O:没有中间文件
- 并行处理:在一个工作链中的所有运算符并行运行
- 简单组合:
cdo -sub -dayavg ifile2 -timavg ifile1 ofile
而不是
cdo -timavg ifile1 tmp1 cdo -dayavg ifile2 tmp2 cdo -sub tmp2 tmp1 ofile rm tmp1 tmp2
- 高级组合:
cdo -timmean -yearsum -setrtoc2,75,78,1,0 -selmon,9,10,11,12,1,2,3 -selyear,1960/1969 ifile ofile
运算符链是CDO的主要特征之一。 尽可能多地使用它。 但请注意:具有任意输入文件列表的运算符不能与其他运算符组合使用:
expr 操作符
The expr 操作符可能是一个很少使用但却更有用的工具。 其目的是在任意字段上逐点计算复杂的数学运算。
假设height.nc
like height.nc包含一个3d垂直坐标变量z,为了输出气压,可以像这样使用expr:
cdo -expr,'ps=1013.25*exp((-1)*(1.602769777072154)*log((exp(z/10000.0)*213.15+75.0)/288.15))' 3dheights.nc out.nc
计算或选择部分数据并将其保存到新文件。例如,创建新变量tupper ,其包含了变量tas中大于等于273.15的值;创建新变量tlower,其包含了变量tas中小于的273.15的值:
cdo -expr,'tupper = ((tas >= 273.15)) ? tas : (tas/0.0); tlower = ((tas < 273.15)) ? tas : (tas/0.0)' <infile> <outfile>
将变量tas单位转换为摄氏度,并计算tupper和tlower变量:
cdo -expr,'tc=tas-273.15; tplus = ((tc >= 0)) ? tc : (tc/0.0); tmin = ((tc < 0)) ? tc : (tas/0.0)' <infile> <outfile>
select和delete操作符
我们已经看到了一些CDO的选择功能,如seltimestep或selname。 select运算符从输入文件中选择一些字段并将其写入输出文件,例如 变量名称,层次,日期或季节。 delete运算符删除一些字段并将结果写入输出文件。
要选择用户定义的季节,请使用带有参数season的select运算符,其中给定的季节是逗号分隔的季节列表(DJFMAMJJA-SOND或ANN的子字符串):
cdo -select,season=JFMAM infile outfile
在不知道infile的总时间步的情况下选择上一个时间步长:
cdo -select,timestep=-1 infile outfile
假设您有3个输入文件。 每个输入文件包含不同时间段的相同变量。 要从所有3个输入文件中选择层次200,500和850上的变量T,U和V,使用:
cdo -select,name=T,U,V,level=200,500,850 infile1 infile2 infile3 outfile
删除文件中的第一个时间步:
cdo -delete,timestep=1 infile outfile
缺测值
有时您需要设置或更改变量的缺测值,或将NaN更改为缺测值。
将缺测值设置为常量值,例如-9999
cdo -setmisstoc,-9999 infile outfile
将常量如-9999设为缺测值
cdo -setctomiss,-999.9 infile outfile
将NaN设为缺测值并把缺测值设为-9999.9
cdo -setmissval,nan infile outfile
cdo -setmissval,-9999.9 -setmissval,nan ifile ofile
自动完成
在官方发行版的contrib子目录中是使用bash,zsh和tcsh自动完成的配置文件。 对于当前的开发状态,可以在这里找到:source:/trunk/cdo/contrib
对于激活,您必须让shell读取相应的文件,例如 对于zsh:
source cdoCompletion.zsh
bash和tcsh的方法类似
引自https://cloud.tencent.com/developer/article/1618310 注:
CDO中提供了两个均值计算操作符:mean 和 average。mean是按照统计函数的方式计算均值,即排除缺省值的影响;average通过求样本总和然后除样本总数,并未排除缺省值的影响。如果样本中不包含缺省值的话,mean和average的计算结果相同。
CDO学习2 CDO 入门教程Tutorial的更多相关文章
- 总结笔记 | 深度学习之Pytorch入门教程
笔记作者:王博Kings 目录 一.整体学习的建议 1.1 如何成为Pytorch大神? 1.2 如何读Github代码? 1.3 代码能力太弱怎么办? 二.Pytorch与TensorFlow概述 ...
- Netty学习_Netty框架入门教程:Netty入门之HelloWorld实现
我们可能都学过Socket通信/io/nio/aio等的编程.如果想把Socket真正的用于实际工作中去,那么还需要不断的完善.扩展和优化.比如很经典的Tcp读包写包问题,或者是数据接收的大小,实际的 ...
- 我的Android前生今世之缘-学习经验-安卓入门教程(六)
关注我,每天都有优质技术文章推送,工作,学习累了的时候放松一下自己. 本篇文章同步微信公众号 欢迎大家关注我的微信公众号:「醉翁猫咪」 据我所知,网上教学资料一堆一堆的,那么还有很多人说,如何学习? ...
- 学习Android Jetpack? 入门教程和进阶实战这里全都有!
前言 2018年谷歌I/O,Jetpack横空出世,官方介绍如下: Jetpack 是一套库.工具和指南,可帮助开发者更轻松地编写优质应用.这些组件可帮助您遵循最佳做法.让您摆脱编写样板代码的工作并简 ...
- 编程基础学习JS的入门教程
将JavaScript 插入网页的方法 使用<script>标签在网页中插入Javascript代码. 插入JavaScript 与在网页中插入CSS的方式相似.使用下面的代码可以在网页中 ...
- 基于Spring Cloud的微服务入门教程
(本教程的原地址发布在本人的简书上:http://www.jianshu.com/p/947d57d042e7,若各位看官有什么问题或不同看法请在这里或简书留言,谢谢!) 本人也是前段时间才开始接触S ...
- 学习swift语言的快速入门教程推荐
随着苹果产品越来越火爆,苹果新推出的swift必定将在很大程度上代替oc语言.学好swift语言,对于IOS工程师来讲,已经是一门必备技能. 有一些比较好的英文版教程,值得学习. 1. Swift T ...
- TensorFlow 中文资源全集,官方网站,安装教程,入门教程,实战项目,学习路径。
Awesome-TensorFlow-Chinese TensorFlow 中文资源全集,学习路径推荐: 官方网站,初步了解. 安装教程,安装之后跑起来. 入门教程,简单的模型学习和运行. 实战项目, ...
- TensorFlow 中文资源精选,官方网站,安装教程,入门教程,实战项目,学习路径。
Awesome-TensorFlow-Chinese TensorFlow 中文资源全集,学习路径推荐: 官方网站,初步了解. 安装教程,安装之后跑起来. 入门教程,简单的模型学习和运行. 实战项目, ...
- WPF/MVVM Quick Start Tutorial - WPF/MVVM 快速入门教程 -原文,翻译及一点自己的补充
转载自 https://www.codeproject.com/articles/165368/wpf-mvvm-quick-start-tutorial WPF/MVVM Quick Start T ...
随机推荐
- 深入理解计算机系统(CSAPP)bomblab实验进阶之nuclearlab——详细题解
前言 本实验是难度高于bomblab的一个补充实验,该实验部分题目难度已经达到CTF入门水平,且这个实验据说是上一届的某个学长原创,因此互联网上几乎找不到类似的题目.在间断地思考了几周后我最终完成了所 ...
- Java/.Net双平台核心,Jvm和CLR运行异同点
前言: 本篇以.Net 7.0.2 CLR 和 OpenJDk19参照,解析下它们各自调用函数的异同. 以下为个人理解. 概述 JDK大约5.9G,CLR大约7.6G,两者相差1.7G左右. root ...
- 自己动手从零写桌面操作系统GrapeOS系列教程——8.x86介绍
由于GrapeOS目前只支持x86,所以本讲我们简单的介绍一下x86. 百度百科上是这样介绍的:x86泛指一系列基于Intel 8086且向后兼容的中央处理器指令集架构. 中央处理器就是我们平时说的C ...
- react的useRef
在使用RN动画的时候,看到这样的代码: const App = () => { const fadeAnim = useRef(new Animated.Value(0)).current; / ...
- Android 缩小动画
public class MainActivity extends AppCompatActivity { private ConstraintLayout content; @Override pr ...
- python 排序的几种方式(内置排序函数, 选择排序, 冒泡排序)
#python 排序的方法 #Python 列表有一个内置的 list.sort() 方法可以直接修改列表 list1 = [1,3,5,10,2,1] list1.sort() print(list ...
- 【4】java之基础数据类型的包装类
一.认识包装类 java 在设计之初有一个基本原则:一切皆对象,一切的操作都基于对象,但是有一个矛盾,基本数据类型不是对象.为了符合于这种要求,最早使用人为的方式解决此问题,如下所示: class ...
- java学习日记20230227-java代码规范
JAVA代码规范 类,方法的注释要使用javadoc来写 非javadoc的注释往往是给代码维护者看的,着重告诉读者为什么这么写,如何修改,注意什么问题等 使用tab操作,实现缩进,默认整体向右边移动 ...
- Java学习笔记(二)java流程控制
学习笔记2 Java流程控制 这次也是跟着[狂神说Java]Java零基础学习视频通俗易懂继续学习的,持续学习,你我共勉. 一. 用户交互Scanner 1. Scanner对象 之前学的基本语法没有 ...
- 第三周作业-N67044-张铭扬
1. 图文并茂说明raid0,raid1, raid10, raid01, raid5等原理. "RAID"是指独立硬盘冗余阵列(RAID, Redundant Array of ...