#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 实现快速删除一个用户

    一.具体方法 一般情况下直接执行 drop role xxx; 就可以把这个用户删除.但是很多时候会因为用户有依赖而报错. 二.权限依赖 postgres=# create role test wit ...

  2. Postgresql动态共享内存类型

    一.简介 linux为多个进程通信提供了不同的IPC机制,如:System V , POSIX 和 MMAP,所以Postgresql共享内存管理也支持以上类型. 在Postgresql中可以使用dy ...

  3. 彰显个性│github 和 gitlab 之自定义首页样式

    目录 个性首页 制作步骤 修改内容 个性首页 相信很多小伙伴在逛 github 和 gitlab 的时候 会发现很多开发者的首页异常的炫酷,如 https://github.com/autofelix ...

  4. centos7中关闭防火墙命令

    1.命令行界面输入命令"systemctl status firewalld.service"并按下回车键. 2.然后在下方可以查看得到"active(running)& ...

  5. CSS3,线性渐变(适用标题背景)

    .test{ margin:200px auto; height:30px; border:1px #D4D4D4 solid; box-shadow:0 -1px 10px rgba(0,0,0,0 ...

  6. Anaconda 环境中安装OpenCV (cv2)

    1.使用Anaconda 的对应环境,查看环境中的Python版本号 (1)使用Anaconda 查看存在的环境:conda info --env (2)激活环境:conda activate XXX ...

  7. mybatis全局配置:下划线转驼峰

    处理字段名和属性名不一致的情况: mybatis-config.xml配置 <settings> <setting name="mapUnderscoreToCamelCa ...

  8. 报错com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Incorrect datetime value: '1' for column 'date' at row 1问题解决

    出现 com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Incorrect datetime value: '1' ...

  9. SQL注入、XSS

    参考视频 一.Sql注入的原因 用户输入的信息,拼接到程序中进行了执行. 一.使用Burpsuite,进行万能钥匙探索 二.使用sqlmap进行测试 三.SQL注入基础知识 Mysql 5.x数据结构 ...

  10. 记录C#学习过中看到的文章

    1.DataRow 转实体类 https://www.cnblogs.com/macT/p/10878863.html https://www.cnblogs.com/yangboyu/archive ...