Xarray 对象属性
术语
DataArray 带有标签或命名维度的多维数组。DataArray对象向底层“无标签”数据结构(如numpy和Dask数组)添加元数据,如维度名称、坐标和属性( 定义如下) 。如果设置了可选的name属性,则它是一个命名的DataArray。 DataSet 具有对齐维度的DataArray对象的类似dict的集合。因此,可以在单个DataArray的维度上执行的大多数操作都可以在数据集上执行。数据集有数据变量( 参见下面的变量)、维度、坐标和属性。 Variable 一种类似NetCDF的变量,由描述单个数组的维度、数据和属性组成。变量和numpy数组的主要功能区别是,对变量的数值运算通过维度名实现数组广播。每个DataArray都有一个可以通过arr.variable访问的基础变量。但是,在Dataset或DataArray之外,变量没有得到完整的描述。 Dimension 在数学中,数据的维数是它的自由度数。尺寸轴是所有点的集合,其中除一个自由度外,所有自由度都是固定的。我们可以认为每个维度轴都有一个名称,例如“x维度”。在xarray中,DataArray对象的维度是其命名的维度轴da.dims,第I个维度的名称是da.dims[i] 。如果创建数组时没有指定维度名称,默认维度名称将是dim_0、dim_1,依此类推。 Coordinate 标记另一个DataArray的一个或一组维度的数组。在通常的一维情况下,坐标数组的值可以粗略地认为是沿着一个维度的刻度标签。我们区分维度坐标和非维度坐标,以及索引坐标和非索引坐标。可以从arr.coords[x] 中检索一个名为x的坐标。DataArray可以有比维度更多的坐标,因为一个维度可以由多个坐标数组标记。但是,只能将一个坐标数组指定为特定维度的维度坐标数组。 Dimension coordinate 分配给arr的一维坐标数组,在arr.dims中具有名称和维度名称。通常(但不总是) ,维度坐标也是索引坐标,以便它可以用于基于标签的索引和对齐,就像pandas上的索引一样。DataFrame或pandas.Series Non-dimension coordinate 分配给arr的坐标数组,其名称在arr.coords中,但不在arr.dims中。这些坐标数组可以是一维的,也可以是多维的,它们对于辅助标注很有用。例如,当数据的物理坐标( 如纬度和经度) 与其逻辑坐标不同时,多维坐标通常用于地球科学数据集中。打印arr.coords将打印所有arr的坐标名称,相应的尺寸在括号中。例如,坐标名称( 尺寸名称)1 2 3… Indexed coordinate 具有相关索引的坐标。通常,这意味着坐标标签可用于索引(选择) 和/或对齐。索引坐标可以有一个或多个任意尺寸,尽管在大多数情况下它也是一个尺寸坐标。它可能会或可能不会与其他索引坐标分组,这取决于它们是否共享相同的索引。打印DataArray或Dataset时,索引坐标用星号* 标记。 Non-indexed coordinate 没有相关索引的坐标。它可能仍然表示沿一个或多个维度的固定标签,但不能用于基于标签的索引和对齐。 Index 索引是一种数据结构,它在由坐标标签定义的离散或连续空间内为高效的数据选择和对齐进行了优化(除非它是函数索引) 。默认情况下,Xarray创建一个PandasIndex对象用于每个维度坐标。对于更高级的用例(例如,交错或不规则网格、地理空间索引) ,Xarray还接受与一个或多个任意坐标相关联的专用索引子类的任何实例。与坐标x相关联的索引可以由arr.xindexesx 。如果两个坐标x和y共享同一个索引,arr.xindexes[x]和arr.xindexes[y]都返回同一个index对象。 name 维度、坐标、数据数组对象和数据变量的名称可以是任何名称,只要它们是可哈希的。但是,最好使用str类型的名称。 scalar 根据定义,标量不是数组,当转换为数组时,它只有0维。这意味着,例如,int、float和str对象是“标量”的,而list或tuple不是。 duck array Duck数组是行为类似numpy数组的数组实现。他们必须定义形状、数据类型和ndim属性。为了与xarray集成,还需要__array__、__ array_ufunc__和__array_function__协议。 Aligning 对齐是指确保两个或多个数据数组或数据集具有相同的维度和坐标,以便它们可以正确组合或比较的过程。 Broadcasting 一种允许在不同形状和维度的数组上执行操作的技术。当对具有不同形状和维度的数组执行操作时,xarray会在应用操作之前自动尝试将数组传播到一个公共形状。
import xarray as xr
import numpy as np
a = xr. DataArray( np. array( [ 1 , 2 , 3 ] ) , dims= [ "x" ] )
b = xr. DataArray( np. array( [ 4 , 5 , 6 , 7 ] ) , dims= [ "y" ] )
print ( a + b)
"""
<xarray.DataArray (x: 3, y: 4)>
array([[ 5, 6, 7, 8],
[ 6, 7, 8, 9],
[ 7, 8, 9, 10]])
Dimensions without coordinates: x, y
"""
Merging 合并用于组合两个或多个数据集或数据数组,这些数据集或数据数组在相同的维度上具有不同的变量或坐标。合并时,xarray沿指定的维度对齐不同数据集的变量和坐标,并创建一个包含所有变量和坐标的新数据集。
import xarray as xr
import numpy as np
arr1 = xr. DataArray(
[ 1 , 2 , 3 ] , dims= [ "x" ] , coords= { "x" : [ 10 , 20 , 30 ] } , name= "arr1"
)
arr2 = xr. DataArray(
[ 4 , 5 , 6 ] , dims= [ "x" ] , coords= { "x" : [ 20 , 30 , 40 ] } , name= "arr2"
)
merged_ds = xr. Dataset( { "arr1" : arr1, "arr2" : arr2} )
print ( merged_ds)
"""
<xarray.Dataset>
Dimensions: (x: 4)
Coordinates:
* x (x) int32 10 20 30 40
Data variables:
arr1 (x) float64 1.0 2.0 3.0 nan
arr2 (x) float64 nan 4.0 5.0 6.0
"""
Concatenating 串联用于沿一个维度组合两个或多个数据集或数据数组。当串联时,xarray沿着一个新的维度排列数据集或数据数组,并且产生的数据集或数据数组将沿着其他维度具有相同的变量和坐标。
import xarray as xr
import numpy as np
a = xr. DataArray( [ [ 1 , 2 ] , [ 3 , 4 ] ] , dims= ( "x" , "y" ) )
b = xr. DataArray( [ [ 5 , 6 ] , [ 7 , 8 ] ] , dims= ( "x" , "y" ) )
c = xr. concat( [ a, b] , dim= "c" )
print ( c)
"""
<xarray.DataArray (c: 2, x: 2, y: 2)>
array([[[1, 2],
[3, 4]],
[[5, 6],
[7, 8]]])
Dimensions without coordinates: c, x, y
"""
Combining 组合是使用合并和串联操作的某种组合将两个或多个数据数组或数据集排列成单个数据数组或数据集的过程。
import xarray as xr
import numpy as np
ds1 = xr. Dataset(
{ "data" : xr. DataArray( [ [ 1 , 2 ] , [ 3 , 4 ] ] , dims= ( "x" , "y" ) ) } ,
coords= { "x" : [ 1 , 2 ] , "y" : [ 3 , 4 ] } ,
)
ds2 = xr. Dataset(
{ "data" : xr. DataArray( [ [ 5 , 6 ] , [ 7 , 8 ] ] , dims= ( "x" , "y" ) ) } ,
coords= { "x" : [ 2 , 3 ] , "y" : [ 4 , 5 ] } ,
)
combined_ds = xr. combine_by_coords( [ ds1, ds2] )
print ( combined_ds)
"""
<xarray.Dataset>
Dimensions: (x: 3, y: 4)
Coordinates:
* x (x) int32 1 2 3
* y (y) int32 3 4 4 5
Data variables:
data (x, y) float64 1.0 2.0 nan nan 3.0 4.0 5.0 6.0 nan nan 7.0 8.0
"""
Lazy 延迟求值的操作直到必要时才会将数据加载到内存中。xarray让您计划要做的计算,而不是立即进行计算,比如在数据集中查找平均温度。这种规划被称为“懒评”。稍后,当您准备好查看最终结果时,您告诉xarray,“好的,现在开始做那些计算吧!”这时,xarray开始按照你计划的步骤工作,并给出你想要的答案。这种懒惰的方法有助于节省时间和内存,因为xarray只在您真正需要结果时才工作。 labeled 标记数据包含描述数据上下文的元数据,而不仅仅是原始数据值。该上下文信息可以是阵列轴的标签(即尺寸名称)、沿轴的记号标签( 存储为坐标变量) 或每个阵列的唯一名称。这些标签为数据提供了上下文和含义,使其更易于理解和使用。如果你有不同城市的气温数据。使用xarray,您可以标记维度: 一个用于城市,另一个用于时间。 serialization 序列化是将数据转换为易于保存和共享的格式的过程。当您在xarray中序列化数据时,您将获得所有这些温度测量值,以及它们的标签和其他信息,并将它们转换为可以存储在文件中或通过互联网发送的格式。xarray对象可以被序列化为存储标签和数据的格式。一些支持的序列化格式是可以存储或传输的文件( 例如netCDF),而其他的是允许通过网络访问数据的协议(例如Zarr)。 indexing 索引和选择数据是您选择感兴趣的数据子集的方式。 基于标签的索引: 通过传递特定标签并将其与存储在关联坐标中的标签进行比较来选择数据。您可以使用标签来指定您想要的内容,例如“给我7月15日纽约的气温。” 位置索引:您可以使用数字来引用数据中的位置,如“给我第三个温度值”。当您知道数据的顺序但不需要记住确切的标签时,这很有用。 切片:您可以对数据进行“切片”,就像您可能想要从7月1日到7月10日的所有温度。xarray支持位置索引和基于标签的索引的切片。