cdo | 常用命令

整理一下平时经常会使用的cdo命令

如何来更改netcdf数据中的变量名呢?

假设我现在有一个sst月平均数据,希望将里面的变量名称sst修改为sst_new

netcdf oisst_monthly {
dimensions:
        lat = 180 ;
        lon = 360 ;
        time = UNLIMITED ; // (476 currently)
        nbnds = 2 ;
variables:
        float lat(lat) ;
                lat:units = "degrees_north" ;
                lat:long_name = "Latitude" ;
                lat:actual_range = 89.5f, -89.5f ;
                lat:standard_name = "latitude" ;
                lat:axis = "Y" ;
                lat:coordinate_defines = "center" ;
        float lon(lon) ;
                lon:units = "degrees_east" ;
                lon:long_name = "Longitude" ;
                lon:actual_range = 0.5f, 359.5f ;
                lon:standard_name = "longitude" ;
                lon:axis = "X" ;
                lon:coordinate_defines = "center" ;
        short sst(time, lat, lon) ;
                sst:long_name = "Monthly Mean of Sea Surface Temperature" ;
                sst:unpacked_valid_range = -5.f, 40.f ;
                sst:actual_range = -1.8f, 35.56862f ;
                sst:units = "degC" ;
                sst:add_offset = 0.f ;
                sst:scale_factor = 0.01f ;
                sst:missing_value = 32767s ;
                sst:precision = 2s ;
                sst:least_significant_digit = 2s ;
                sst:var_desc = "Sea Surface Temperature" ;
                sst:dataset = "NOAA Optimum Interpolation (OI) SST V2" ;
                sst:level_desc = "Surface" ;
                sst:statistic = "Mean" ;
                sst:parent_stat = "Weekly Mean" ;
                sst:standard_name = "sea_surface_temperature" ;
                sst:cell_methods = "time: mean (monthly from weekly values interpolated to daily)" ;
                sst:valid_range = -500s, 4000s ;
      

使用nco

ncrename -v sst,sst_new oisst_monthly.nc

修改结果,修改成功了

ncdump -h oisst_monthly.nc                                                                                                                                    
netcdf oisst_monthly {
dimensions:
        lat = 180 ;
        lon = 360 ;
        time = UNLIMITED ; // (476 currently)
        nbnds = 2 ;
variables:
        float lat(lat) ;
                lat:units = "degrees_north" ;
                lat:long_name = "Latitude" ;
                lat:actual_range = 89.5f, -89.5f ;
                lat:standard_name = "latitude" ;
                lat:axis = "Y" ;
                lat:coordinate_defines = "center" ;
        float lon(lon) ;
                lon:units = "degrees_east" ;
                lon:long_name = "Longitude" ;
                lon:actual_range = 0.5f, 359.5f ;
                lon:standard_name = "longitude" ;
                lon:axis = "X" ;
                lon:coordinate_defines = "center" ;
        short sst_new(time, lat, lon) ;
                sst_new:long_name = "Monthly Mean of Sea Surface Temperature" ;
                sst_new:unpacked_valid_range = -5.f, 40.f ;
                sst_new:actual_range = -1.8f, 35.56862f ;
                sst_new:units = "degC" ;
                sst_new:add_offset = 0.f ;
                sst_new:scale_factor = 0.01f ;
                sst_new:missing_value = 32767s ;
                sst_new:precision = 2s ;
                sst_new:least_significant_digit = 2s ;
                sst_new:var_desc = "Sea Surface Temperature" ;
                sst_new:dataset = "NOAA Optimum Interpolation (OI) SST V2" ;
                sst_new:level_desc = "Surface" ;
                sst_new:statistic = "Mean" ;
                sst_new:parent_stat = "Weekly Mean" ;
                sst_new:standard_name = "sea_surface_temperature" ;
                sst_new:cell_methods = "time: mean (monthly from weekly values interpolated to daily)" ;
                sst_new:valid_range = -500s, 4000s ;

当然,使用nco还可以修改属性的名称;下面是一个将 netcdf 文件中的 miss_value_FillValue 更改为零的示例:

ncatted -O -a missing_value, MITVAR,o,f,0 dasilva94_monthly_sst.nc
ncatted -O -a _FillValue,        MITVAR,o,f,0 dasilva94_monthly_sst.nc

其中,MITVAR是变量名,o 表示覆盖; f 表示浮点类型; 0是新值。

使用cdo

在刚刚修改为sst_new的基础上,使用cdo将其修改为sst_renew

cdo chname,sst_new,sst_renew oisst_monthly.nc oisst_monthly_renew.nc 

修改结果

ncdump -h oisst_monthly_renew.nc                                                                                                                                  ✔  anaconda3  95% hdd   16:49:39
netcdf oisst_monthly_renew {
dimensions:
       time = UNLIMITED ; // (476 currently)
       bnds = 2 ;
       lon = 360 ;
       lat = 180 ;
variables:
       double time(time) ;
               time:standard_name = "time" ;
               time:long_name = "Time" ;
               time:bounds = "time_bnds" ;
               time:units = "days since 1800-1-1 00:00:00" ;
               time:calendar = "standard" ;
               time:axis = "T" ;
       double time_bnds(time, bnds) ;
       float lon(lon) ;
               lon:standard_name = "longitude" ;
               lon:long_name = "Longitude" ;
               lon:units = "degrees_east" ;
               lon:axis = "X" ;
       float lat(lat) ;
               lat:standard_name = "latitude" ;
               lat:long_name = "Latitude" ;
               lat:units = "degrees_north" ;
               lat:axis = "Y" ;
       short sst_renew(time, lat, lon) ;
               sst_renew:standard_name = "sea_surface_temperature" ;
               sst_renew:long_name = "Monthly Mean of Sea Surface Temperature" ;
               sst_renew:units = "degC" ;
               sst_renew:add_offset = 0.f ;
               sst_renew:scale_factor = 0.01f ;
               sst_renew:_FillValue = 32767s ;
               sst_renew:missing_value = 32767s ;
               sst_renew:unpacked_valid_range = -5.f, 40.f ;
               sst_renew:actual_range = -1.8f, 35.56862f ;
               sst_renew:precision = 2s ;
               sst_renew:least_significant_digit = 2s ;
               sst_renew:var_desc = "Sea Surface Temperature" ;
               sst_renew:dataset = "NOAA Optimum Interpolation (OI) SST V2" ;
               sst_renew:level_desc = "Surface" ;
               sst_renew:statistic = "Mean" ;
               sst_renew:parent_stat = "Weekly Mean" ;
               sst_renew:cell_methods = "time: mean (monthly from weekly values interpolated to daily)" ;
               sst_renew:institution = "NCEP" ;

  • 经过测试,对于变量名称的修改,cdo的速度要明显快于nco(在我这个测试个例里面);当然,nco的修改结果还是在原本的数据里面,而cdo的修改结果保留在一个新的nc文件里面

如何使用wget从ftp或者网页直接下载数据呢?

  • 通过写一个shell脚本来实现

Index of /data/sea-surface-temperature-optimum-interpolation/v2.1/access/avhrr

  • https://www.ncei.noaa.gov/data/sea-surface-temperature-optimum-interpolation/v2.1/access/avhrr/

一个完整的数据为:https://www.ncei.noaa.gov/data/sea-surface-temperature-optimum-interpolation/v2.1/access/avhrr/202404/oisst-avhrr-v02r01.20240401.nc

可以发现其链接的组成很有规则,下载一个文件时,我们可以直接wget https://www.ncei.noaa.gov/data/sea-surface-temperature-optimum-interpolation/v2.1/access/avhrr/202404/oisst-avhrr-v02r01.20240401.nc

但是如果下载多个文件呢,就可以根据它有规则命名的属性来进行循环迭代下载

#!/bin/bash
# 循环遍历每个年份
for year in {2021..2021}; do
   # 循环遍历每个月份
   for month in {01..12}; do
       # 循环遍历每一天
       for day in {01..31}; do
           # 构建文件名
           filename="oisst-avhrr-v02r01.${year}${month}${day}.nc"
           # 构建下载链接
           url="https://www.ncei.noaa.gov/data/sea-surface-temperature-optimum-interpolation/v2.1/access/avhrr/${year}${month}/${filename}"
           # 使用 wget 下载文件
           wget -o ./get -c -nH  -c  -r -A nc "$url"
       done
   done
done

如何对于多个netcdf文件进行求和计算呢?

cdo enssum file1 file2 out.nc

或者

cdo enssum *_sst.nc out.nc

如何对于netcdf数据进行插值呢?

  • 守恒插值 (适用于降水数据)

cdo remapcon,r180x90  pr.nc  pr_regrid_2x2.nc 

  • 双线性插值
cdo remapbic,r144x73 in.nc out_interp.nc 

如何修改数据calendar的类型呢?

cdo setcalendar,standard ua_day_EC-Earth3_data.nc ua_day_EC-Earth3_data_stand.nc 

如何合并多个netcdf文件呢?

将多个nc数据按照时间维度进行合并,屡试不爽的方法。当然最好是保证要合并的数据都在同一个文件夹内。

  cdo mergetime GPM*.nc GPM-2004-05-07.nc 
  • 也可以通过python基于xr.concat()进行合并,当时还是cdo一行命令好使呀。虽然合并后的数据可能会偏大。

如何对于netcdf进行时间滤波呢?

  • 对于数据是月平均来说,如果要进行10个月的低通滤波,可以使用以下命令:
cdo lowpass,0.1 sst.anomaly.nc out.nc

  • 对于数据是日平均来说,如果要进行30-60天的带通滤波
cdo bandpass,365/60,365/30 sst.day.ano.nc out.nc

注意数据中不能存在nan值或者缺测值

如何处理数据中存在的nan值或者缺测值?

  • 将正常的数据转换为Nan值
cdo setmissval,nan input.nc output.nc
  • 将Nan值转化为其他值
cdo setmissval,0 input.nc output.nc

https://dwang.wordpress.com/

https://code.mpimet.mpg.de/boards/2/topics/4057

https://code.mpimet.mpg.de/boards/2/topics/11084

python & cdo :https://code.mpimet.mpg.de/projects/cdo/wiki/Cdo%7Brbpy%7D

cdo使用手册:http://www.idris.fr/media/ada/cdo.pdf

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/665760.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

利用“记忆化搜索“解斐波那契数

一、题目描述 求第 n 个斐波那契数。 二、 利用"记忆化搜索"解斐波那契数 什么是记忆化搜索?记忆化搜索就是带有备忘录的递归。 我们先来看一下使用递归来解斐波那契数的这个过程,假设求第5个斐波那契数F(5)。 由图可见,要重复计…

【mysql数据库】mycat中间件

MyCat 简介 Mycat 是数据库 中间件 。 1、 数据库中间件 中间件 是一类连接软件组件和应用的计算机软件, 以便于软件各部件之间的沟通 。 例子 Tomcat web 中间件 。 数据库 中间件 连接 java 应用程序和数据库 2、 为什么要用 Mycat ① Java 与数据库紧耦合 …

Halcon 光度立体 缺陷检测

一、概述 halcon——缺陷检测常用方法总结(光度立体) - 唯有自己强大 - 博客园 (cnblogs.com) 上周去了康耐视的新品发布会,我真的感觉压力山大,因为VM可以实现现在项目中的80% 的功能,感觉自己的不久就要失业了。同时…

基于Python的校园预约打印网站的实现

基于Python的校园预约打印网站的实现 开发语言:Python 数据库:MySQL所用到的知识:Django框架工具:pycharm、Navicat、Maven 系统功能实现 注册 新用户首先要进行注册信息填写,填写完成以后进行登录即可使用此网站 打印社 分别有…

vue3 前端实现导出下载pdf文件

这样的数据实现导出 yourArrayBufferOrByteArray 就是后端返回数据 // 创建Blob对象const blob new Blob([new Uint8Array(res)], { type: application/pdf })// 创建一个表示该Blob的URLconst url URL.createObjectURL(blob);// 创建一个a标签用于下载const a document.cr…

使用Redis缓存实现短信登录逻辑,手机验证码缓存,用户信息缓存

引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency> 加配置 spring:redis:host: 127.0.0.1 #redis地址port: 6379 #端口password: 123456 #密码…

三十二篇:转化决策为行动:探索决策支持系统的深层价值

转化决策为行动&#xff1a;探索决策支持系统的深层价值 1. DSS的精髓&#xff1a;定义与核心功能 1.1 定义与作用 在现代商业的快速演变中&#xff0c;决策支持系统&#xff08;Decision Support Systems, DSS&#xff09;已成为企业获得竞争优势的重要工具。DSS是一种利用先…

全国产飞腾模块麒麟信安操作系统安全漏洞

1、背景介绍 目前在全国产飞腾模块上部署了麒麟信安操作系统&#xff0c;经第三方机构检测存在以下漏洞 操作系统版本为 内核版本为 openssh版本为 2、openssh CBC模式漏洞解决 首先查看ssh加密信息 nmap --script "ssh2*" 127.0.0.1 | grep -i cbc 可以通过修改/…

Elasticsearch 认证模拟题 - 5

一、题目 .在集群上有一个索引 food_ingredient&#xff0c;搜索需要满足以下要求&#xff1a; 三个字段 manufacturer&#xff0c;name&#xff0c;brand 都能匹配到文本 cake mix高亮 字段 name&#xff0c;并加标签排序&#xff0c;对字段 brand 正序&#xff0c;_score 降…

快手发布大模型产品“可图”,超20种创新AI图像玩法限免上线

近日&#xff0c;快手自研大模型产品“可图”&#xff08;Kolors&#xff09;正式对外开放&#xff0c;支持文生图和图生图两类功能&#xff0c;已上线20余种AI图像玩法。目前&#xff0c;用户可以通过“可图大模型”官方网站和微信小程序&#xff0c;免费使用各项AI图像功能。…

12k Star!Continue:Github Copilot 开源本地版、开发效率和隐私保护兼得、丰富功能、LLM全覆盖!

原文链接&#xff1a;&#xff08;更好排版、视频播放、社群交流、最新AI开源项目、AI工具分享都在这个公众号&#xff01;&#xff09; 12k Star&#xff01;Continue&#xff1a;Github Copilot 开源本地版、开发效率和隐私保护兼得、丰富功能、LLM全覆盖&#xff01; &…

结构设计模式 - 代理设计模式 - JAVA

代理设计模式 一. 介绍二. 代码示例2.1 定义 CommandExecutor 类2.2 定义 CommandExecutorProxy代理类2.3 模拟客户端2.4 测试结果 三. 结论 前言 这是我在这个网站整理的笔记,有错误的地方请指出&#xff0c;关注我&#xff0c;接下来还会持续更新。 作者&#xff1a;神的孩子…

基础—SQL—DQL(数据查询语言)分组查询

一、引言 分组查询的关键字是&#xff1a;GROUP BY。 二、DQL—分组查询 1、语法 SELECT 字段列表 FROM 表名 [ WHERE 条件 ] GROUP BY 分组字段名 [ HAVING 分组后过滤条件 ]; 注意&#xff1a; 1、[ ] 里的内容可以有可以没有。 2、这条SQL语句有两块指定条件的地方&#…

k8s的ci/cd实践之旅

书接上回k8s集群搭建完毕&#xff0c;来使用它强大的扩缩容能力帮我们进行应用的持续集成和持续部署&#xff0c;整体的机器规划如下&#xff1a; 1.192.168.8.156 搭建gitlab私服 docker pull gitlab/gitlab-ce:latest docker run --detach --hostname 192.168.8.156 --publ…

如何在Windows 10上更改默认系统字体,这里有详细步骤

Windows 10的默认系统字体Segoe UI看起来相当不错。但是,如果你有更好的替代品,你可以更改Windows 10 PC上的默认系统字体。我们将向你展示如何执行此操作。 如何使用注册表编辑器更改默认系统字体 在撰写本文时,“设置”和“控制面板”都没有更改默认系统字体的选项。这意…

【评价类模型】熵权法

1.客观赋权法&#xff1a; 熵权法是一种客观求权重的方法&#xff0c;所有客观求权重的模型中都要有以下几步&#xff1a; 1.正向化处理&#xff1a; 极小型指标&#xff1a;取值越小越好的指标&#xff0c;例如错误率、缺陷率等。 中间项指标&#xff1a;取值在某个范围内较…

电子阅览室能给孩子做什么

电子阅览室为孩子提供了很多活动和资源&#xff0c;可以为他们提供以下服务&#xff1a; 1. 提供电子书籍和儿童读物&#xff1a;电子阅览室通常提供大量的电子书籍和儿童读物&#xff0c;供孩子选择阅读。 2. 提供儿童学习资源&#xff1a;专久智能电子阅览室可以提供各种学习…

HarmonyOS 鸿蒙应用开发( 五、快速实现ArkUI页面底部导航Tabs)

当页面信息较多时&#xff0c;为了让用户能够聚焦于当前显示的内容&#xff0c;需要对页面内容进行分类&#xff0c;提高页面空间利用率。Tabs组件可以在一个页面内快速实现视图内容的切换&#xff0c;一方面提升查找信息的效率&#xff0c;另一方面精简用户单次获取到的信息量…

神经网络与深度学习——第14章 深度强化学习

本文讨论的内容参考自《神经网络与深度学习》https://nndl.github.io/ 第14章 深度强化学习 深度强化学习 强化学习&#xff08;Reinforcement Learning&#xff0c;RL&#xff09;&#xff0c;也叫增强学习&#xff0c;是指一类从与环境交互中不断学习的问题以及解决这类问题…

关于MD5

首先还是介绍一下关于md5的基本信息&#xff1a; MD5&#xff08;Message Digest Algorithm 5&#xff09;是一种常用的哈希函数&#xff0c;用于产生128位&#xff08;16字节&#xff09;的哈希值&#xff0c;通常以32个十六进制数字表示。MD5广泛用于计算文件或文本数据的校…