`.NC`文件的读取与使用
.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`文件的读取与使用的更多相关文章
- 基于GDAL库,读取.nc文件(以海洋表温数据为例)C++版
对于做海洋数据处理的同学,会经常遇到nc格式的文件,nc文件的格式全称是NetCDF,具体的详细解释请查询官网[https://www.unidata.ucar.edu/software/netcdf ...
- java读取nc文件的问题,前端ajax 发送参数进行交互的实例
1.问题背景: 需要解析nc文件的数据源,获取一个三维数据,并计算器开发值. java 后台处理: 定以一个实例来接收解析的数据并返回给前端. package cn.edu.shou.domain; ...
- 【python】读取nc文件
读取nc文件前的准备,安装一些库 1.先把几个用到的库下载 Cartopy 简介与安装(转载) - 简书 (jianshu.com) Python Extension Packages for Win ...
- NC文件的处理【netcdf】
NC是气象领域数据的标准格式之一. 能够更好的存储格点数据. 下面为测试NC文件的读写. git:https://git.oschina.net/ipnunu/nctest pom.xml <p ...
- excel to datatable (c#用NPOI将excel文件内容读取到datatable数据表中)
将excel文件内容读取到datatable数据表中,支持97-2003和2007两种版本的excel 1.第一种是根据excel文件路径读取excel并返回datatable /// <sum ...
- 条形码的应用三-----------从Excel文件中读取条形码
条形码的应用三------从Excel文件中读取条形码 介绍 上一篇文章,我向大家展示了生成多个条形码并存储到Excel文件中的一个方法.后来我又有了个想法:既然条码插入到excel中了,我可不可以从 ...
- java通过文件路径读取该路径下的所有文件并将其放入list中
java通过文件路径读取该路径下的所有文件并将其放入list中 java中可以通过递归的方式获取指定路径下的所有文件并将其放入List集合中.假设指定路径为path,目标集合为fileList,遍 ...
- [html5+java]文件异步读取及上传核心代码
html5+java 文件异步读取及上传关键代码段 功能: 1.多文件文件拖拽上传,file input 多文件选择 2.html5 File Api 异步FormData,blob上传,图片显示 3 ...
- Servlet从本地文件中读取图片,并显示在页面中
import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpSer ...
- PHP文件操作 读取与写入
基本知识: PHP文件系统是基于Unix系统的 文件数据基本类型:二进制数据.文本数据 文件输入流:数据从源文件到内存的流动 文件输出流:数据从内存保存到文件的流动 文件操作函数: >>& ...
随机推荐
- delphi 弹出输入框的InputQuery, InputQuery 函数用法
delphi 弹出输入框的InputQuery, InputQuery 函数用法 procedure TForm1.Button1Click(Sender: TObject); var str: st ...
- 张高兴的大模型开发实战:(三)使用 LangGraph 为对话添加历史记录
目录 基础概念 环境搭建与配置 将对话历史存储至内存 将对话历史存储至 PostgreSQL 在构建聊天机器人时,对话历史记录是提升用户体验的核心功能之一,用户希望机器人能够记住之前的对话内容,从而避 ...
- 【虚拟机】Windows(x86)上部署ARM虚拟机(Ubuntu)
[虚拟机]Windows(x86)上部署ARM虚拟机(Ubuntu) 零.起因 最近在学嵌入式,这就不得不涉及ARM指令集,但是电脑是x86指令集的,用手机不太方便,买开发板又要等几天--,总之就是要 ...
- zk基础—1.一致性原理和算法
大纲 1.分布式系统特点 2.分布式系统的理论 3.两阶段提交Two-Phase Commit(2PC) 4.三阶段提交Three-Phase Commit(3PC) 5.Paxos岛的故事来对应Zo ...
- 学习Linux只要学会这个命令就够了!
大家好,我是良许. 这段时间又是搬家,又是找新办公室,现在终于安顿下来了,有时间给大家分享干货了. 今天给大家介绍一个 Linux 超级实用命令,有了这个命令,你就可以愉快使用 Linux 上几乎所有 ...
- 从零开始:在Qt中使用OpenGL绘制指南
本文只介绍基本的 QOpenGLWidget 和 QOpenGLFunctions 的使用,想要学习 OpenGL 的朋友,建议访问经典 OpenGL 学习网站:LearnOpenGL CN 本篇文章 ...
- springboot将vo生成文件到目录
依赖 org.springframework spring-mock 2.0.8 com.alibaba fastjson 1.2.62 service实现 public RestResponseBo ...
- 整合阿里OSS进行文件上传
3.整合阿里OSS进行文件上传 1).引入spring-cloud-starter-alicloud-oss包 2).在配置文件中配置Key.endpoint 3).自动注入private OSSCl ...
- C#之集合常用扩展方法与Linq
一.集合的常用扩展方法(lambda的方式) 1.Where() 根据条件选择数据 2.Select() 根据数据条件转换成新的数据类型,类似于DTO转换类 3.Max() 根据条件选择最大值 4.M ...
- <HarmonyOS第一课02>DevEco Studio的使用
视频链接: https://developer.huawei.com/consumer/cn/training/course/slightMooc/C101717494752698457?ha_sou ...