.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. java如何实现对List集合进行分页

    对List集合进行分页: private <T> Page<T> listToPage(List<T> dataList, Integer pageSize, In ...

  2. NumPy学习9

    今天学习了NumPy排序和搜索功能 17, NumPy排序和搜索功能 numpy_test9.py : import numpy as np ''' 17, NumPy排序和搜索功能 NumPy 提供 ...

  3. C++ 常用转换API记录

    //wstring转string std::string wstring2string(IN std::wstring& wstr) { std::string result; //获取缓冲区 ...

  4. Swarm集群部署、集群架构、集群管理 、服务管理

    一.部署swarm集群 #docker swarm简介 Docker Swarm 和 Docker Compose 一样,都是 Docker 官方容器编排项目,但不同的是,Docker Compose ...

  5. 从Docker Machine到K8S:容器管理为啥有这么多工具?

    2018-11-09 18:01 ​​关注嘉为科技,获取运维新知 目录 1.有了Docker,为啥还需要额外容器管理工具 2.Docker三剑客 Docker Machine Docker Compo ...

  6. Docker镜像相关-查看镜像信息

    主要涉及Docker镜像的ls.tag和inspect子命令. 使用images命令列出镜像 使用docker images或docker image ls命令可以列出本地主机上已有镜像的基本信息,字 ...

  7. .NET原生操作向量数据库实战系列(一):.向量数据库的应用以及与AI结合的畅想

    在当今数据驱动的时代,向量数据库(Vector Database)作为一种新兴的数据库技术,正逐渐成为软件开发领域的重要组成部分.特别是在 .NET 生态系统中,向量数据库的应用为开发者提供了构建智能 ...

  8. [源码系列:手写spring] IOC第十四节:容器事件和事件监听器

    代码分支 https://github.com/yihuiaa/little-spring/tree/event-and-event-listenerhttps://github.com/yihuia ...

  9. 在类 Unix 系统中将 Nginx 源码导入 CLion 并调试运行

    零.写在最前面 0.1 关于系统 如标题所述,本文的操作需要一个类 Unix 系统(MacOS.CentOS.Ubuntu 等). 同时这些类 Unix 系统还需要有 gcc 编译器.具体如何搞定这些 ...

  10. centos firewall防火墙操作指令记录

    1. 查看防火墙状态 systemctl status firewalld.service 2. 关闭防火墙 systemctl stop firewalld.service 3. 开机自动关闭防火墙 ...