Datawhale AI 夏令营 -- xarray初识

xarray提供了DataArray和Dataset两种数据结构,见官方文档

一、DataArray

DataArray与np.array相比,提供了一个更加直观的读取数据方式:

  • label -- 标签

对于拥有自然维度的数据,如气象等,可以直接将x命名为time,代码可阅读性更强。

import numpy as np
import xarray as xr
 
data = np.random.rand(4, 3)
locs = ["One", "Two", "Three"]
times = pd.date_range("2000-01-01", periods=4)
foo = xr.DataArray(data, coords=[times, locs], dims=["time", "space"])

这样就定义了一个DataArray对象,形态类似于pd.Dataframe,即每个列、行都有对应的label,或者叫name,相当于Dataframe中的列header和行index。

输出foo如上,可以看到如下:

  • 数组大小与data一致——为4x3
  • time为行标签,有四个维度
  • space为列标签,有三个维度

那在Dataframe中类似的格式如下:

space1space2space3
time1xxx
time2xxx
time3xxx
time4xxx

那么此时如果需要取出数据,则语法如下:

这行代码的意思就是,取出列(space)为"Two"的这一列数据。同样,取出某一行数据也是同样的函数。

如果只查看坐标轴的名称参数,即输出(time1, time2, time3 ……),整体上与dist类似,运行代码:

二、Dataset

Dataset可以理解为多个DataArray的堆积

ds = xr.Dataset(
    data_vars={
        "a": (("x", "y"), np.ones((3, 3))),
        "b": ("t", np.full(4, 1), {"b atrri": "b value"}),
              },       
    coords={
        "longtitude":("x",[-1, 0, 1]),
        "latitude":("y",[-1, 0, 1]),
        "time":("t",["2021-09-01", "2021-09-02", "2021-09-03", "2021-09-04"])
)

这段代码可以简单理解为,创建两个DataArray,分别命名为"a","b",然后组合成一个Dataset

  • x,y两个三维的坐标组合表示"a"——(3,3)的数组
  • t一个四维的坐标表示"b"——(4,1)的数组

结构上与DataArray一致,data表示数据,coords表示坐标信息,且坐标的维度要与数据的维度相一致

当我们需要取出单个数组时,语法与上文类似

三、sel与isel

sel,全称(select by label)

  • sel方法允许你根据标签(labels)来选择数据。这意味着你可以使用维度的标签来选择数据,而不是使用索引。
  • 它通常用于选择具有明确标签的维度,例如时间、空间或其他具有实际意义的标签。
  • sel方法可以处理不连续的选择,即可以选择多个不连续的标签。

对上述数据做出修改

ds = xr.Dataset(
    data_vars={
        "a": (("x", "y"), np.random.randn(3,3)),
        "b": ("t", np.full(4, 1), {"b atrri": "b value"}),
              },       
    coords={
        "longtitude":("x",[-1, 0, 1]),
        "latitude":("y",[-1, 0, 1]),
        "time":("t",["2021-09-01", "2021-09-02", "2021-09-03", "2021-09-04"])
            },
)

可以如下取出数据

是不是很怪?按理应该是取第一行,但是实际上却变成了index取出。我们将x输出,可以发现:

x里面的数值竟然是[0, 1, 2]而不是[-1, 0, 1]

isel,全称(Index select by label)

网上列举的特点如下:

  • isel方法允许你根据整数索引(integer locations)来选择数据。这意味着你需要使用维度的索引位置来选择数据,而不是使用标签。
  • 它通常用于选择连续的数据块,或者当你需要选择数据的特定位置时。
  • isel方法只能处理连续的选择,不能选择不连续的索引。

对于同样的语法,改用isel后发现其实是可以非连续取出数据的

  • 13
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值