.NC文件的读取与使用

前言

NetCDF(network Common Data Form)网络通用数据格式是一种面向数组型并适于网络共享的数据的描述和编码标准。目前,NetCDF广泛应用于大气科学、水文、海洋学、环境模拟、地球物理等诸多领域。用户可以借助多种方式方便地管理和操作 NetCDF 数据集。

在数学建模的过程中,我们难免会接触到一些气象文件,而.nc文件便是其中最为常见的一种,我们如果能利用好这些文件,对我们进行数学建模有着极大的好处和便利。

Matlab

Matlab是一款强大的数学建模软件,其中也加入了对于.nc文件的支持

% 定义年份范围
start_year = 2014;
end_year = 2020; % 遍历每一年
for year = start_year:end_year
% 构建文件名
nc_filename = sprintf('.nc\\MARv3.11.3-ssp245-%d_clip.nc', year); % 获取文件信息
info = ncinfo(nc_filename); % 创建结构体来存储RU变量的数据
data = struct(); % 读取RU变量的数据
varname = 'RU';
if ismember(varname, {info.Variables.Name})
data.(varname) = ncread(nc_filename, varname);
else
error('变量 %s 不存在于文件 %s 中。', varname, nc_filename);
end % 构建CSV文件名
csv_filename = sprintf('RU_%d_data.csv', year); % 将RU变量的数据写入CSV文件
writematrix(data.RU, csv_filename); % 显示处理信息
fprintf('Data for year %d has been written to %s\n', year, csv_filename);
end

在这里我使用Matlab读取了从2014~2020全年的数据,并且只读取变量RU的数值,将其写入到CSV文件中,方便下一步处理

netCDF4

[!WARNING]

目前最新的Python 3.12尚不支持netCDF4,因此请使用Python 3.11版本

import netCDF4
import matplotlib.pyplot as plt
# 打开 .nc 文件 for years in range(1993, 2014):
dataset = netCDF4.Dataset(r'.nc\MARv3.11.3-historical-{}_clip.nc'.format(years), 'r') smb = dataset.variables['SMB'][:]
x = dataset.variables['x'][:]
y = dataset.variables['y'][:] # 绘制 'SMB' 的空间分布图
plt.figure(figsize=(10, 6))
plt.contourf(x, y, smb[0, :, :], cmap='viridis')
plt.colorbar(label='SMB')
plt.title(r'Spatial Distribution Map of SMB {}'.format(years))
plt.xlabel('X')
plt.ylabel('Y')
plt.savefig(r'SMB\Spatial Distribution Map of SMB {}'.format(years), bbox_inches='tight')
# plt.show() # 关闭文件
dataset.close()

xarray

[!WARNING]

此方法为ChatGPT生成的方法,本人在自己系统环境中没有使用成功过,因此只供参考

import xarray as xr
import matplotlib.pyplot as plt # 打开 .nc 文件,并忽略冲突的坐标解码
file_path = '/mnt/data/MARv3.11.3-historical-1993_clip.nc'
ds = xr.open_dataset(file_path, decode_cf=False) # 查看数据集的信息
ds_info = ds # 查看变量 'SMB' 的数据
smb = ds['SMB']
smb_info = smb # 获取特定时间点的数据并绘制空间图
time_index = 0 # 选择第一个时间点
smb_at_time = smb.isel(time=time_index) # 绘制 'SMB' 的空间分布图
plt.figure(figsize=(10, 6))
plt.contourf(ds['x'].values[0], ds['y'].values[:, 0], smb_at_time, cmap='viridis')
plt.colorbar(label='SMB')
plt.title(f'SMB at time index {time_index}')
plt.xlabel('X')
plt.ylabel('Y')
plt.show() # 获取特定位置的时间序列数据并绘制时间序列图
x_index = 10 # 选择一个 x 位置
y_index = 5 # 选择一个 y 位置
smb_time_series = smb[:, y_index, x_index] # 绘制 'SMB' 的时间序列图
plt.figure(figsize=(10, 6))
plt.plot(ds['time'].values, smb_time_series)
plt.title(f'SMB Time Series at location (x={x_index}, y={y_index})')
plt.xlabel('Time')
plt.ylabel('SMB')
plt.show() ds_info, smb_info

如果你有兴趣了解更多的话,不妨请移步:.NC文件的读取与使用 | 小树

`.NC`文件的读取与使用的更多相关文章

  1. 基于GDAL库,读取.nc文件(以海洋表温数据为例)C++版

    对于做海洋数据处理的同学,会经常遇到nc格式的文件,nc文件的格式全称是NetCDF,具体的详细解释请查询官网[https://www.unidata.ucar.edu/software/netcdf ...

  2. java读取nc文件的问题,前端ajax 发送参数进行交互的实例

    1.问题背景: 需要解析nc文件的数据源,获取一个三维数据,并计算器开发值. java 后台处理: 定以一个实例来接收解析的数据并返回给前端. package cn.edu.shou.domain; ...

  3. 【python】读取nc文件

    读取nc文件前的准备,安装一些库 1.先把几个用到的库下载 Cartopy 简介与安装(转载) - 简书 (jianshu.com) Python Extension Packages for Win ...

  4. NC文件的处理【netcdf】

    NC是气象领域数据的标准格式之一. 能够更好的存储格点数据. 下面为测试NC文件的读写. git:https://git.oschina.net/ipnunu/nctest pom.xml <p ...

  5. excel to datatable (c#用NPOI将excel文件内容读取到datatable数据表中)

    将excel文件内容读取到datatable数据表中,支持97-2003和2007两种版本的excel 1.第一种是根据excel文件路径读取excel并返回datatable /// <sum ...

  6. 条形码的应用三-----------从Excel文件中读取条形码

    条形码的应用三------从Excel文件中读取条形码 介绍 上一篇文章,我向大家展示了生成多个条形码并存储到Excel文件中的一个方法.后来我又有了个想法:既然条码插入到excel中了,我可不可以从 ...

  7. java通过文件路径读取该路径下的所有文件并将其放入list中

    java通过文件路径读取该路径下的所有文件并将其放入list中   java中可以通过递归的方式获取指定路径下的所有文件并将其放入List集合中.假设指定路径为path,目标集合为fileList,遍 ...

  8. [html5+java]文件异步读取及上传核心代码

    html5+java 文件异步读取及上传关键代码段 功能: 1.多文件文件拖拽上传,file input 多文件选择 2.html5 File Api 异步FormData,blob上传,图片显示 3 ...

  9. Servlet从本地文件中读取图片,并显示在页面中

    import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpSer ...

  10. PHP文件操作 读取与写入

    基本知识: PHP文件系统是基于Unix系统的 文件数据基本类型:二进制数据.文本数据 文件输入流:数据从源文件到内存的流动 文件输出流:数据从内存保存到文件的流动 文件操作函数: >>& ...

随机推荐

  1. 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义

    引言 ❝ 小编是一名10年+的.NET Coder,期间也写过Java.Python,从中深刻的认识到了软件开发与语言的无关性.现在小编已经脱离了一线开发岗位,在带领团队的过程中,发现了很多的问题,究 ...

  2. 质数测试——Fermat素数测试和MillerRabin素数测试

    质数测试 今天我来填坑了,之前我在数学基础算法--质数篇这篇文章中提到我要单独讲一下MillerRabin算法,最近已经有许多粉丝在催了,所以我马不停蹄的来出这篇文章了,顺便把Fermat素数测试也讲 ...

  3. tsconfig.json报错问题

    tsconfig.json报错问题 前言 创建 tsconfig.json 配置文件时,VS Code 会自动检测当前项目当中是否有ts文件,若没有则报错,提示用户需要创建一个ts文件后,再去使用ty ...

  4. go 地址对齐保证

    unsafe标准库包 func Alignof(variable ArbitraryType) uintptr. 此函数用来取得一个值在内存中的地址对齐保证(address alignment gua ...

  5. 怎么解决DB读写分离,导致数据不一致问题?

    前言 在互联网中大型项目中,读写分离应该是我们小伙伴经常听说的,这个主要解决大流量请求时,提高系统的吞吐量.因为绝大部分互联网产品都是读多写少,大部分都是读请求,很小部分是写请求. 上图: 1)一个主 ...

  6. 搭建自己的OCR服务,第二步:PaddleOCR环境安装

    PaddleOCR环境安装,遇到了很多问题,根据系统不同问题也不同,不要盲目看别人的教程,有的教程也过时了,根据实际情况自己调整. 我这边目前是使用windows 10系统+CPU + python ...

  7. Ansible忽略任务失败

    在默认情况下,任务失败时会中止剧本任务,不过可以通过忽略失败的任务来覆盖此类行为.在可能出错且不影响全局的段中使用ignore_errors关键词来达到目的. 环境: 受控主机清单文件: [dev] ...

  8. VSCode 终端中文乱码解决方案

    问题描述 以下为一个简单的 c++ 文件代码,注意中文部分的显示内容 //测试代码 #include <stdio.h> int main() { int y = 10; int coun ...

  9. 集合的通用遍历方法--java进阶day09

    1.集合的三种通用遍历方法 之前我们学习过集合的遍历方法,为什么这里还要再学呢? 这是因为,之前我们用的遍历方法使用了索引,但我们知道set接口的实现类的集合均无索引,所以我们要学习通用的遍历方法 2 ...

  10. 【Win32】VC6 Visual C/C++ 6.0 修改程序图标

    零.需求 就想给自己的C程序加个图标,好看些 一.解决 1.操作步骤 1.新建一个资源脚本 2.在新建的脚本上右键,选择插入 3.选择Icon,点新建或者引入,如果你没有准备图标点新建,有的话直接点引 ...