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"donedone
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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

音视频开发14 FFmpeg 视频 相关格式分析 -- H264 NALU格式分析

H264简介-也叫做 AVC H.264,在MPEG的标准⾥是MPEG-4的⼀个组成部分–MPEG-4 Part 10,⼜叫Advanced Video Codec,因此常常称为MPEG-4 AVC或直接叫AVC。 原始数据YUV,RGB为什么要压缩-知道就行 在⾳视频传输过程中,视频⽂件的传输…

Element快速入门

Vue组件库Element 1 Element介绍 vue是侧重于VM开发的,主要用于数据绑定到视图的,ElementUI就是一款侧重于V开发的前端框架,主要用于开发美观的页面的。 Element:是饿了么公司前端开发团队提供的一套基于 Vue 的网站组件库&…

使用pytorch搭建textCNN、BERT、transformer进行文本分类

首先展示数据处理后的类型: 第一列为文本,第二类为标注的标签,数据保存在xlsx的表格中,分为训练集和验证集。 textCNN 直接上整个工程代码: import pandas as pd import numpy as np import torch from torch.util…

SAPUI5基础知识3 - 引导过程(Bootstrap)

1. 背景 在上一篇博客中,我们已经建立出了第一个SAPUI5项目,接下来,我们将为这个项目添加引导过程。 在动手练习之前,让我们先解释一下什么引导过程。 1.1 什么是引导过程? 在计算机科学中,引导过程也称…

Presto 从提交SQL到获取结果 源码详解(3)

物理执行计划 回到SqlQueryExecution.startExecution() ,执行计划划分以后, // 初始化连接,获取Connect 元数据,添加会话,初始ConnectId metadata.beginQuery(getSession(), plan.getConnectors()); // 构建物理执行…

你真的会用收藏夹吗?可道云teamOS收藏夹,竟能缩短多层级文件夹的路径,实现快速访问

在日常工作中,我们时常会面临一个让人头疼的问题:如何在海量的文件和资料中快速找到我们需要的那一份? 尤其是在团队协作中,每个人都在不断地上传、更新文件……导致文件目录层级复杂,搜索也变得繁琐。 这时候&#x…

编程学习 (C规划) 6 {24_4_18} 七 ( 简单扫雷游戏)

首先我们要清楚扫雷大概是如何实现的: 1.布置雷 2.扫雷(排查雷) (1)如果这个位置是雷就炸了,游戏结束 (2)如果不是雷,就告诉周围有几个雷 3.把所有不是雷的位置都找…

一周学会Django5 Python Web开发 - Django5内置Admin系统二次开发

锋哥原创的Python Web开发 Django5视频教程: 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计56条视频,包括:2024版 Django5 Python we…

【C++】Vector的简易模拟与探索

💞💞 前言 hello hello~ ,这里是大耳朵土土垚~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹 💥个人主页&#x…

模型 FABE(特性 优势 好处 证据)法则

说明:系列文章 分享 模型,了解更多👉 模型_思维模型目录。特性、优势、好处、证据,一气呵成。 1 FABE法则的应用 1.1 FABE法则营销商用跑步机 一家高端健身器材公司的销售代表正在向一家新开的健身房推销他们的商用跑步机。以下…

Microsoft Dynamics 365 Business Central 讲解VAT RATE CHANGE TOOL(增值税税率更改工具)

学习目标: 如果使用VAT RATE CHANGE TOOL(增值税税率更改工具) 过程演示: 1.创建新的VAT产品过账组 2.创建新的总账科目以过账采购、销售和逆向征收增值税。 3.给新的VAT产品过账设置过账设置 4.创建一个新的一般产品过账组 5…

CUDA学习(2)

什么是CUDA CUDA(Compute Unified Device Architecture),统一计算设备架构,英伟达推出的基于其GPU的通用高性能计算平台和编程模型。 借助CUDA,开发者可以充分利用英伟达GPU的强大计算能力加速各种计算任务。 软件生…

手写HTML字符串解析成对应的 AST语法树

先看效果 展示如下: HTML模版 转成ast语法树后 在学习之前,我们需要了解这么一个问题,为什么要将HTML字符串解析成对应的 AST语法树。 为什么? 语法分析:HTML字符串是一种标记语言,其中包含了大量的标签…

chap5 CNN

卷积神经网络(CNN) 问题描述: 利用卷积神经网络,实现对MNIST数据集的分类问题 数据集: MNIST数据集包括60000张训练图片和10000张测试图片。图片样本的数量已经足够训练一个很复杂的模型(例如 CNN的深层…

gcc 内建函数示例 __builtin_return_address

1,理论未动&#xff0c;示例先行 hello_gcc_callstack.c #include <stdio.h>void do_backtrace() {void *pc0 __builtin_return_address(0);void *pc1 __builtin_return_address(1);void *pc2 __builtin_return_address(2);void *pc3 __builtin_return_address(3);…

低边驱动与高边驱动

一.高边驱动和低边驱动 低边驱动(LSD): 在电路的接地端加了一个可控开关&#xff0c;低边驱动就是通过闭合地线来控制这个开关的开关。容易实现&#xff08;电路也比较简单&#xff0c;一般由MOS管加几个电阻、电容&#xff09;、适用电路简化和成本控制的情况。 高边驱动&am…

JVM哪些区域可能出现内存溢出,哪些地方需要GC?

GC顾名思义也就是垃圾回收&#xff0c;有人的地方就有江湖&#xff0c;那有数据的地方也理应有垃圾回收&#xff0c;所以思考一下&#xff0c;沿着之前提到过的JVM内存分区&#xff0c;堆&#xff0c;栈&#xff0c;程序计数器&#xff0c;方法区 堆、栈、方法区…

一键安装 HaloDB 之 Ansible for Halo

↑ 关注“少安事务所”公众号&#xff0c;欢迎⭐收藏&#xff0c;不错过精彩内容~ 前倾回顾 前面介绍了“光环”数据库的基本情况和安装办法。 哈喽&#xff0c;国产数据库&#xff01;Halo DB! 三步走&#xff0c;Halo DB 安装指引 以及 HaloDB 的 Oracle 和 MySQL 兼容模式: …

ChatGPT-4o 有何特别之处?

文章目录 多模态输入&#xff0c;多模态输出之前的模型和现在模型对比 大家已经知道&#xff0c;OpenAI 在 GPT-4 发布一年多后终于推出了一个新模型。它仍然是 GPT-4 的一个变体&#xff0c;但具有前所未见的多模态功能。 有趣的是&#xff0c;它包括实时视频处理等强大功能&…

Mac安装第三方软件的命令安装方式

场景&#xff1a; 打开终端命令行&#xff0c;sudo xattr -rd com.apple.quarantine&#xff0c;注意最后quarantine 后面加一个空格&#xff01;然后打开Finder&#xff08;访达&#xff09;&#xff0c;点击左侧的 应用程序&#xff0c;找到相关应用&#xff0c;拖进终端qua…