`.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系统的 文件数据基本类型:二进制数据.文本数据 文件输入流:数据从源文件到内存的流动 文件输出流:数据从内存保存到文件的流动 文件操作函数: >>& ...
随机推荐
- 多智能体粒子环境(Multi-Agent Particle Env)食用指南--从入门到入土
0.项目地址: 原地址:openai/multiagent-particle-envs: Code for a multi-agent particle environment used in the ...
- Web前端入门第2问:前端开发是什么?与后端、全栈的区别是什么?一个完整的Web项目有哪些角色参与?
一个完整的Web项目有哪些角色参与? 提出需求(这一步可以是甲方,也可以是用户) 需求分析,画出原型图(产品经理) 根据原型图输出 UI 界面及交互图(UI/UX设计师) 根据UI及交互效果画出页面, ...
- ShardingSphere分组聚合,数据异常问题
在使用ShardingSphere分组聚合时是,出现了数据汇总不正确问题.我这里只进行了分表,未进行分库.使用的是广播查询,因为是定时任务统计,无法使用到分片键.进行分组的字段是两个 1. SQL查询 ...
- 【Linux】3.11 包管理工具(RPM和YUM)
包管理工具 1. RPM包 RPM:RedHat Package Manager,红帽软件包管理工具. Linuxd分发版本都有采用(suse,redhat,centos等) 1.1 rpm指令 1. ...
- Vscode写Markdown解决图片使用问题
最近使用Vscode+Markdown写博客,图片不好弄,想了一下办法,有需要的人可以参考,有更方便的方法欢迎提出! 首先为了解决图片粘贴问题,下载一个扩展,Markdown Paste,下载 ...
- 使用java代码获取JVM信息
转载请注明出处: 最近在环境中定位服务问题,由于服务使用的docker部署的,且使用的docker镜像,在启动之后,容器内没有jdk相关的工具[jstat.jmap等等]:于是采用 在项目中使用jav ...
- .NET 原生驾驭 AI 新基建实战系列(三):Chroma ── 轻松构建智能应用的向量数据库
在人工智能AI和机器学习ML迅猛发展的今天,数据的存储和检索需求发生了巨大变化.传统的数据库擅长处理结构化数据,但在面对高维向量数据时往往力不从心.向量数据库作为一种新兴技术,专为AI应用设计,能够高 ...
- 从excle中读取数据的方法
倒入两个库:ExcelLibrary,Collections 首先,必须注意文件格式为xls 表格内容 open_Excel C:\\Users\\Beckham\\Desktop\\a.xls ...
- 《基于改进Wallace树的Posit乘法单元优化》(一)
原文 文章通过增加特定的计数器.重新设计部分积求和阶段计数器布局 以及改进最终求和阶段使用的加法器,提出一种名为3L-Wallace树的改进Wallace树算法,有效减少了部分积求和的阶段数, 从而降 ...
- 一个简单的struts2配置
目录 1 需求 2 需要导入的jar包 3 项目的目录结构 3.1 demo1.jsp 3.2 success.jsp 3.3 HelloAction.java 3.4 struts.xml 3.5 ...