【学习笔记】xarray库的基本使用(一)

文章目录

  • 一、简介
  • 二、安装
  • 三、导入库
  • 四、创建xarray对象
    • (一)DataArray对象
    • (二)Dataset对象
  • 五、数据索引与切片
    • (一)DataArray的索引与切片
      • 1. 基于坐标索引
      • 2. 基于位置索引(类似NumPy)
    • (二)DataSet的索引与切片
      • 1. 选择变量
      • 2. 基于坐标选择数据子集
  • 六、数据运算
    • (一)算术运算
    • (二)聚合运算
  • 七、数据重塑与交换
    • (一)堆叠与解堆叠
    • (二)转置维度
  • 八、数据可视化
    • (一)简单可视化(使用matplotlib)
  • 九、数据输入与输出
    • (一)读取数据文件(NetCDF格式为例)
    • (二)保存数据(NetCDF格式为例)
  • 十、总结

一、简介

xarray是一个用于处理多维数组和数据集的Python库。它构建在NumPy、pandas等库之上,为处理带有标签(坐标)的多维数据提供了方便的接口,在地球科学、气象学、海洋学等需要处理多维数据的领域广泛应用。
(放佛什么也没说,大概就是在处地球、气象、海洋等领域的数据比较好用。)

二、安装

  1. 使用pip安装(推荐)

    • 在命令行中输入:
    pip install xarray
    
  2. 使用conda安装(如果使用Anaconda环境)

    • 在命令行中输入:
    conda install xarray
    

三、导入库

在Python脚本或交互式环境(如Jupyter Notebook)中,导入xarray库:

import xarray as xr

四、创建xarray对象

(一)DataArray对象

  • 创建简单的DataArray对象。
    1. 首先创建一个NumPy数组:
    import numpy as np
    data = np.array([[1, 2], [3, 4]])
    
    1. 然后定义坐标:
    coords = {'x': [10, 20], 'y': ['a', 'b']}
    dims = ['x', 'y']
    
    1. 最后创建DataArray:
    da = xr.DataArray(data, coords = coords, dims = dims)
    

(二)Dataset对象

  • 创建简单的Dataset对象。
    1. 先创建两个DataArray:
    data1 = np.array([[1, 2], [3, 4]])
    coords1 = {'x': [10, 20], 'y': ['a', 'b']}
    dims1 = ['x', 'y']
    da1 = xr.DataArray(data1, coords = coords1, dims = dims1)
    data2 = np.array([[5, 6], [7, 8]])
    da2 = xr.DataArray(data2, coords = coords1, dims = dims1)
    
    1. 然后创建Dataset:
    ds = xr.Dataset({'var1': da1, 'var2': da2})
    

五、数据索引与切片

(一)DataArray的索引与切片

1. 基于坐标索引

  • 例如,要选择x = 10的那一行数据:
    subset_da = da.sel(x = 10)
    

2. 基于位置索引(类似NumPy)

  • 选择第一行数据:
    subset_da = da[0]
    

(二)DataSet的索引与切片

1. 选择变量

  • 要选择Dataset中的var1变量:
    subset_ds_var1 = ds['var1']
    

2. 基于坐标选择数据子集

  • 例如,选择x = 10的数据子集:
    subset_ds = ds.sel(x = 10)
    

六、数据运算

(一)算术运算

  1. 在DataArray和Dataset上都可以进行算术运算。

例如,对于两个DataArray da1和da2:
加法:result = da1 + da2。
减法:result = da1 - da2。

  1. 在Dataset中,变量之间也可以进行类似运算。

(二)聚合运算

  1. 计算平均值:
    • 对于DataArray,计算沿x维度的平均值:
    mean_da = da.mean(dim='x')
    
    • 对于Dataset中的变量,计算沿x维度的平均值:
    mean_ds_var1 = ds['var1'].mean(dim='x')
    
  2. 其他聚合运算:
    • 还可以计算标准差(std)、最大值(max)、最小值(min)等聚合运算,方法类似。

七、数据重塑与交换

(一)堆叠与解堆叠

  1. 堆叠
    • 例如,将x和y维度堆叠成一个新的维度z
    stacked_da = da.stack(z = ('x', 'y'))
    
  2. 解堆叠
    • 对堆叠后的DataArray进行解堆叠:
    unstacked_da = stacked_da.unstack('z')
    

(二)转置维度

  • 对于DataArray或Dataset,可以转置维度:例如,转置da的维度:
    transposed_da = da.transpose()
    

八、数据可视化

(一)简单可视化(使用matplotlib)

  • 对于DataArray和Dataset中的变量,可以直接进行可视化。
  • 例如,绘制da的数据:
    da.plot()
    
  • 绘制Dataset中的var1变量
    ds['var1'].plot()
    

九、数据输入与输出

(一)读取数据文件(NetCDF格式为例)

  • 使用open_dataset函数读取NetCDF文件:
    ds = xr.open_dataset('data.nc')
    

(二)保存数据(NetCDF格式为例)

  • 使用to_netcdf函数保存Dataset为NetCDF文件:
    ds.to_netcdf('new_data.nc')
    

十、总结

本文讲述了xarray的一些基本的使用,但是部分细节还有待深入,也算是有个学习的框架吧,后续将会一一推出各个部分的详细博客来讲解xarray的使用。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

七牛云成功保存但无法显示和访问{“error“:“download token not specified“}

在使用七牛云存储图片时,前端通过链接访问图片时遇到错误: {"error":"download token not specified"} 具体表现为: 后端通过 access_key 和 secret_key 生成了上传和下载的 Token。前端将域名与 res.key 拼接后生成图…

linux下环境变量的使用

文章目录 环境变量一、环境变量的定义与特点二、环境变量的分类三、常用的环境变量四 环境变量相关指令五 c语言获取环境变量接口六 通过代码如何获取环境变量 环境变量 环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数 一、环境变量…

2-2-18-9 QNX系统架构之文件系统(三)

阅读前言 本文以QNX系统官方的文档英文原版资料为参考,翻译和逐句校对后,对QNX操作系统的相关概念进行了深度整理,旨在帮助想要了解QNX的读者及开发者可以快速阅读,而不必查看晦涩难懂的英文原文,这些文章将会作为一个…

基于 MVC 架构的 SpringBoot 高校行政事务管理系统:设计优化与实现验证

摘 要 身处网络时代,随着网络系统体系发展的不断成熟和完善,人们的生活也随之发生了很大的变化,人们在追求较高物质生活的同时,也在想着如何使自身的精神内涵得到提升,而读书就是人们获得精神享受非常重要的途径。为了…

vue3-Import declaration conflicts with local declaration of dayjs

同步发布于我的网站 🚀 概述错误描述 原代码报错信息 原因分析解决方案 修改导入语句使用泛型 代码解释总结 概述 在使用 Vue3 和 dayjs 时,可能会遇到一个常见的错误:“Import declaration conflicts with local declaration of ‘dayjs’…

【ubuntu-22.04】ubuntu-22.04搭建openwrt-23.05编译环境操作说明

ubuntu-22.04镜像下载 Index of /releases/22.04.1 安装ubuntu系统 安装openwrt-23.05依赖包 sudo apt update sudo apt install build-essential clang flex bison g++ gawk \ gcc-multilib g++-multilib gettext git libncurses-dev libssl-dev \ python3-distutils pyth…

html+css网页设计马林旅行社移动端4个页面

htmlcss网页设计马林旅行社移动端4个页面 网页作品代码简单,可使用任意HTML辑软件(如:Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作)。 获取源码 1&#…

【算法】位运算合集

阿华代码,不是逆风,就是我疯 你们的点赞收藏是我前进最大的动力!! 希望本文内容能够帮助到你!! 目录 零:位运算基础公式 零:五道基础题 1:位1的个数 2:比…

Android 硬件抽象层(HAL)全解析:智能设备硬件协同揭秘

在Android硬件抽象层(HAL)开发中,需要掌握许多底层技术,并熟悉如何将硬件驱动与Android系统的上层应用接口相集成。以下是HAL开发中需要掌握的核心技术和一些示例代码,以帮助理解其实现原理: 1. C/C编程和…

Linux如何将文件或目录打成rpm包?-- rpmbuild打包详解

👨‍🎓博主简介 🏅CSDN博客专家   🏅云计算领域优质创作者   🏅华为云开发者社区专家博主   🏅阿里云开发者社区专家博主 💊交流社区:运维交流社区 欢迎大家的加入&#xff01…

推荐学习笔记:矩阵补充和矩阵分解

参考: 召回 fun-rec/docs/ch02/ch2.1/ch2.1.1/mf.md at master datawhalechina/fun-rec GitHub 业务 隐语义模型与矩阵分解 协同过滤算法的特点: 协同过滤算法的特点就是完全没有利用到物品本身或者是用户自身的属性, 仅仅利用了用户与…

java引用第三方jar包,打包全流程

前言: 本文是使用maven引入第三方jar包,通过mvn命令打包。 以下为引入第三方jar包,打包进项目jar中的全流程步骤。 1、引入第三方jar包 1、放置路径 一般来说,放到项目(子项目)的resources的lib目录下。 2、pom引入 如图所示…

【webApp之h5端实战】首页评分组件的原生实现

关于评分组件,我们经常在现代前端框架中用到,UI美观效果丰富,使用体验是非常不错的。现在自己动手使用原生js封装下评分组件,可以用在自己的项目中。 组件实现原理 点击的❤左侧包括自己都是高亮的样式,右侧都是灰色的样式,这样就能把组件的状态区分开了。右边再加上辅…

基于Java Springboot旅游攻略APP且微信小程序

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、Vue、Element-ui 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA/eclipse 微信…

ScratchLLMStepByStep:一步一步构建大语言模型教程

前言 在学习大语言模型的时候,总会遇到各种各样的名词,像自注意力、多头、因果、自回归、掩码、残差连接、归一化等等。这些名词会让学习者听的云里雾里,觉得门槛太高而放弃。 本教程将会带你从零开始,一步一步的去构建每一个组…

[MacOS] [kubernetes] MacOS玩转虚拟化最佳实践

❓ 为什么不在MacOS本机安装呢?因为M系列芯片是Arm架构,与生产环境或者在本地调试时候,安装虚拟镜像和X86不同,造成不必要的切换环境的额外成本,所以在虚拟化的x86调试 步骤 & 详情 一: 安装OrbStack & 并配置…

MySQL的用户管理和密码管理

用户的密码管理 给用户改密码 初始化mysql后设置初始密码 mysqladmin -uroot password wzy666 改变已有密码 mysqladmin -uroot -pwzy666 password wzy999 SQL语句改,前提是已经进入数据库 alter user rootlocalhost identified by 123456; # 利用数据库服务…

SQLite:DDL(数据定义语言)的基本用法

SQLite:DDL(数据定义语言)的基本用法 1 主要内容说明2 相关内容说明2.1 创建表格(create table)2.1.1 SQLite常见的数据类型2.1.1.1 integer(整型)2.1.1.2 text(文本型)2…

STM32--基于STM32的智能家居设计与实现

本文详细介绍基于STM32F103C8T6的智能家居设计与实现,详细设计资料见文末链接 一、功能模块介绍 智能家居系统系统图如下所示,主要包括温湿度传感器、OLED液晶显示,WIFI物联网模块、人体红外预警模块、烟雾传感器模块、蜂鸣器模块 &#…

基于Java Springboot校园导航微信小程序

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、Vue、Element-ui 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA/eclipse微信开发…