#20210117#注:如果需要用cdo对数据进行截取,可参考buguse的几篇博文:

  1. 如何利用CDO从数据集中提取数据
  2. CDO条件性选择数据 - 云+社区 - 腾讯云
  3. CDO转换数据集格式 - 云+社区 - 腾讯云

-------------------------------------------------------------------------------------------------------------

用户手册,参考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>

基本用法

  1. 显示文件的变量Display variables of a file

    cdo -showname <infile>
  2. 显示文件的时间步数目Display number of timesteps of a file
    cdo -ntime <infile>
  3. 显示格点信息?Display Information about the underlying grid: griddes does the following:
    cdo -griddes tsurf.nc
    
  4. 文件转换到不同类型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
  5. 选择变量Select variables from file: select variable tas
    cdo -selname,tas <infile> <outfile>

    select variables u10 and v10

    cdo -selname,u10,v10 <infile> <outfile>
  6. 选择时间步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>
  7. 选取子区域Select only data of the northern hemisphere (sub-region):
    cdo -sellonlatbox,-180,180,0,90 <infile> <outfile>
  8. 经纬度网格重新排列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>
  9. 经纬度反转Invert the latitudes from north-south to south-north:
    cdo -invertlat <infile> <outfile>
  10. 转换成摄氏度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>
  11. 设置缺测值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>
  12. 计算各月的平均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>
  13. 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:没有中间文件
  • 并行处理:在一个工作链中的所有运算符并行运行
  1. 简单组合:

    cdo -sub -dayavg ifile2 -timavg ifile1 ofile

    而不是

      cdo -timavg ifile1 tmp1
    
      cdo -dayavg ifile2 tmp2
    
      cdo -sub tmp2 tmp1 ofile
    
      rm tmp1 tmp2
    
  2. 高级组合:
    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>

selectdelete操作符

我们已经看到了一些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中提供了两个均值计算操作符:meanaveragemean是按照统计函数的方式计算均值,即排除缺省值的影响average通过求样本总和然后除样本总数,并未排除缺省值的影响。如果样本中不包含缺省值的话,meanaverage的计算结果相同。

CDO学习2 CDO 入门教程Tutorial的更多相关文章

  1. 总结笔记 | 深度学习之Pytorch入门教程

    笔记作者:王博Kings 目录 一.整体学习的建议 1.1 如何成为Pytorch大神? 1.2 如何读Github代码? 1.3 代码能力太弱怎么办? 二.Pytorch与TensorFlow概述 ...

  2. Netty学习_Netty框架入门教程:Netty入门之HelloWorld实现

    我们可能都学过Socket通信/io/nio/aio等的编程.如果想把Socket真正的用于实际工作中去,那么还需要不断的完善.扩展和优化.比如很经典的Tcp读包写包问题,或者是数据接收的大小,实际的 ...

  3. 我的Android前生今世之缘-学习经验-安卓入门教程(六)

    关注我,每天都有优质技术文章推送,工作,学习累了的时候放松一下自己. 本篇文章同步微信公众号 欢迎大家关注我的微信公众号:「醉翁猫咪」 据我所知,网上教学资料一堆一堆的,那么还有很多人说,如何学习? ...

  4. 学习Android Jetpack? 入门教程和进阶实战这里全都有!

    前言 2018年谷歌I/O,Jetpack横空出世,官方介绍如下: Jetpack 是一套库.工具和指南,可帮助开发者更轻松地编写优质应用.这些组件可帮助您遵循最佳做法.让您摆脱编写样板代码的工作并简 ...

  5. 编程基础学习JS的入门教程

    将JavaScript 插入网页的方法 使用<script>标签在网页中插入Javascript代码. 插入JavaScript 与在网页中插入CSS的方式相似.使用下面的代码可以在网页中 ...

  6. 基于Spring Cloud的微服务入门教程

    (本教程的原地址发布在本人的简书上:http://www.jianshu.com/p/947d57d042e7,若各位看官有什么问题或不同看法请在这里或简书留言,谢谢!) 本人也是前段时间才开始接触S ...

  7. 学习swift语言的快速入门教程推荐

    随着苹果产品越来越火爆,苹果新推出的swift必定将在很大程度上代替oc语言.学好swift语言,对于IOS工程师来讲,已经是一门必备技能. 有一些比较好的英文版教程,值得学习. 1. Swift T ...

  8. TensorFlow 中文资源全集,官方网站,安装教程,入门教程,实战项目,学习路径。

    Awesome-TensorFlow-Chinese TensorFlow 中文资源全集,学习路径推荐: 官方网站,初步了解. 安装教程,安装之后跑起来. 入门教程,简单的模型学习和运行. 实战项目, ...

  9. TensorFlow 中文资源精选,官方网站,安装教程,入门教程,实战项目,学习路径。

    Awesome-TensorFlow-Chinese TensorFlow 中文资源全集,学习路径推荐: 官方网站,初步了解. 安装教程,安装之后跑起来. 入门教程,简单的模型学习和运行. 实战项目, ...

  10. WPF/MVVM Quick Start Tutorial - WPF/MVVM 快速入门教程 -原文,翻译及一点自己的补充

    转载自 https://www.codeproject.com/articles/165368/wpf-mvvm-quick-start-tutorial WPF/MVVM Quick Start T ...

随机推荐

  1. Postgresql 全局索引与分区索引对于SQL性能影响的比较及DDL操作后分区全局索引是否会失效

    Postgresql 提供了对于分区表 global index 的支持.global index 不仅提供了对于唯一索引功能的改进(无需包含分区键),而且在性能上相比非global index (l ...

  2. Oracle 11g 单机服务器ASM部署

    Oracle oracle,相比都有所了解,是一家企业级的数据库公司(收费),上图是oracle官网,也是对外的服务平台 oracle有自己独特的安装方式:ASM   :  自动存储管理(ASM,Au ...

  3. mysql常用命令汇总

    1.查询表占用空间语句:SELECT CONCAT(table_schema,'.',table_name) AS 'Table Name', table_rows AS 'Number of Row ...

  4. soursetree 关于https:git remote: Unauthorized和username和password修改

    一.sourcetree推送代码提交不上提示https:git remote: Unauthorized由于没有权限,需要登陆正确的账号以及密码即可以提交 二.SourceTree这是一个无效源路径/ ...

  5. 拼多多anti-content核心算法完全解密+修复

    今天偶然看到拼多多的ant-content好奇就搞了下. 解密方法和代码 代码是用ast来解密的.利用babel处理,解密一部分+手动修复代码. AST相关的教程和文档 https://steaken ...

  6. git 的提交与合并

    1,创建远程仓库   不论是用命令行还是码云之类的都可以 2,git clone url   这是将远程仓库库提交到本地 3, git checkout -b dev   创建dev分支并切换到dev ...

  7. CodeGym自学笔记04——什么是编译器?

    编译器 编程语言可以同时被人和编译器所理解.编译器是一个特殊的程序,它可将用编程语言编写的程序转换成一系列的机器代码. 程序员通常用编程语言来编写程序,然后运行编译器,将程序员编写的程序代码文件转换为 ...

  8. GitLab能通过ssh克隆无法通过http克隆,也无法进行流水线,提示port 80: Connection refused

    问题记录:VM-Ubuntu20.04刚开始时使用NAT模式连接,后来改成桥接模式,改完之后原来使用docker启动的gitlab服务无法克隆,一直提示:fatal...没有远程库什么的,没解决后来删 ...

  9. 硬件IIC的重映射使用问题

    目录 沁恒的蓝牙系列芯片,有映射硬件模块去其他引脚的功能,可以配置各芯片的功能引脚重映射寄存器(R16_PIN_ALTERNATE),或者使用函数GPIOPinRemap函数进行配置. 比如说想要配置 ...

  10. React自定义组件参数小驼峰命名提示警告 Warning: React does not recognize the `xxXxx` prop on a DOM element.

    Warning: React does not recognize the `xxXxx` prop on a DOM element. If you intentionally want it to ...