前言 首先,要快速熟悉一个陌生的nc格式数据,你可以使用Python中的xarray库。xarray是一个用于处理多维数组的强大工具,特别适用于处理带有标签的多维数据。...xarray库的核心数据结构是DataArray和Dataset。DataArray类似于NumPy数组,但它包含坐标和维度标签,使得数据更易于理解和操作。...Dataset是一种类似于字典的数据结构,用于存储多个DataArray,每个DataArray可以共享相同的坐标系。...通过使用xarray库,你可以快速加载、检查和分析nc格式的数据,以便更好地理解和利用这些数据。...接下来,我将为你提供一个简单的xarray库介绍,以帮助你更好地理解如何使用它来处理陌生的nc格式数据。
尽管 xarray.DataArray 对象已经包含了 xarray.DataArray.values 属性用以提取 numpy 数组,但是用于编译扩展时仍会存在问题。...当有多个文件并且每个文件具有多个时间时,如果最后一个文件的时间数少于之前文件的时间数,那么剩余的数组将用缺省值填充。...对这三种绘图系统,当使用 xarray 时通过变量可直接确定地图对象,如果没有使用 xarray,可从 WRF 输出文件获取。 还包括直接从 xarray 切片中获取地理边界的函数。...这在当你想要使用一个大区域的子集,而不想在此子集区域定义地图对象时非常有用。...因为cartopy 地图对象并不包含地理边界信息,因此仅返回一个 cartopy 对象。
DataArray 一个带有标签的多维数组,它有如下几个重要的属性 values 获取数组的具体数值 dims 获取维度的名字,如('x', 'y', 'z') coords 获取一个类似于字典的结果,...数据结构图示 数据类型的使用 读取数据: xarray.open_dataset()读取Dataset类型数据,即能读取多个物理量。...如果nc文件中含有多个物理量,用open_dataarray()读取会报错,因此建议统一都用open_dataset()来读取文件。...提取物理量 从文件中读取数据ds = xarray.open_dataset() 假如数据中含有一个名为var的物理量可以通过ds.var或ds[var]来获取 实例 此处使用的是ERA-Interim...xarray封装了matplotlib的部分绘图函数,一行代码就可以将数据画出来,不过作为一个负责的公众号,还是用cartopy顺带加载了地图。
ds.sst.isel(time=0).plot(vmin=20, vmax=30) 基本计算 xarray 的 DataArray 和 DataSet 对象可以无缝地使用计算操作符(如+, -, *,...需注意的是,许多导入的 xarray 数据集存在单位(units)属性,这些属性可用于绘图,目前独立于 xarray 项目进行开发的包pint[1]可以实现对单位的完全感知并进行转换。...numpy相关的数学函数均可以直接在 xarray 中直接运算。 我们以一个实例来开始下面的内容:用于海水热力学领域的Gibbs 海水工具包[2]。...类似于上面的np.log函数,我们可以直接将 xarray 的 DataArray 对象放在函数括号里。 gsw.t90_from_t68(ds.sst) ?...这对于一些不能直接应用于 xarray 对象的函数是非常便捷的。 xr.apply_ufunc(gsw.t90_from_t68, ds.sst) ?
pandas 数据类型转换和读取写入 pandas 若要由pandas对象转换为 xarray 对象或者由 xarray 转为pandas对象,可以对pandas[4] 对象使用to_xarray[5...]方法或者对 xarray 对象使用to_pandas[6]方法进行转换。...arr = series.to_xarray() arr 运行结果 由于只有一个变量,所以转换的结果是 xarray 中的DataArray类型。...对象的转换方法,只需要在对象后添加to_series /to_dataframe即可: 先创建一个Dataset对象ds ds = xr.Dataset( data_vars={"a": ("x...", np.arange(5)), "b": (("x", "y"), np.ones((5, 4)))} ) ds 对象ds to_series:将多变量数据DataSet使用多重索引,将相应的DataArray
WRF模式前处理 WRF模式后处理 数据提取 投影转换 插值 可视化 本文除了xarray之外,主要使用了 salem 和 xesmf 这两个库,salem 主要是进行前处理和部分后处理操作,xesmf...对象,xy[0] 和 xy[1] 也是 DataArray 对象,得到的才是对应的站点信息。...这是因为在提取站点信息时,.sel这些函数接受的参数应该是 DataArray 对象。 投影转换 一般情况下是不需要进行投影转换的,除非在需要和其它投影的数据进行对比分析。...这里也可以使用 xarray 自带的插值方法进行插值,或者使用 salem 提供的函数进行插值,比如 .wrf_zlevel 进行垂直插值: ds.isel(time=1).salem.wrf_zlevel...的 Dataset 和 DataArray 都有 plot 方法可以进行快速绘图,也可以非常方便的绘制多幅子图。
DataArray 一个带有标签的多维数组,它有如下几个重要的属性 values 获取数组的具体数值 dims 获取维度的名字,如('x', 'y', 'z') coords 获取一个类似于字典的结果,...,比如变量的名字、单位等 数据结构图示 数据类型的使用 读取数据: xarray.open_dataset()读取Dataset类型数据,即能读取多个物理量。...如果nc文件中含有多个物理量,用open_dataarray()读取会报错,因此建议统一都用open_dataset()来读取文件。...提取物理量 从文件中读取数据ds = xarray.open_dataset() 假如数据中含有一个名为var的物理量可以通过ds.var或ds[var]来获取 实例 此处使用的是ERA-Interim...xarray封装了matplotlib的部分绘图函数,一行代码就可以将数据画出来,不过作为一个负责的公众号,还是用cartopy顺带加载了地图。
维度提供了xarray使用的维度名称,从而代替大多数 numpy 函数所使用的 axis(轴) 参数。...DataArray 对象有 name 和 attrs 属性,attrs 包含了元数据信息。名称和属性严格应用于用户代码,并且xarray 不会试图解释这些信息,仅在特定情况下才会传播这些信息。...dimensions ('dim_0', 'dim_1') 跨越多个维度的坐标的字典形式 ds = xr.DataArray(data, coords={'time': times, 'space':...如果要对相同类型的数值进行操作的话,需要使用坐标或是分离DataArray对象为单个的Dataset。...rename 方法进行重命名操作,这不会改变原变量的信息,而是新创建一个变量: >> foo.rename('bar') <xarray.DataArray 'bar' (dim_0: 4, dim_
类似pandas对象,xarray也对象支持沿着每个维度基于整数和标签的查找。 但是xarray对象还具有命名维度,因此您可以选择使用维度名称代替维度的整数索引。...的索引类似 numpy 数组索引,只不过它返回的是一个新的 DataArray 对象。...arr[dict(space=0)] = 0 点索引 xarray 点索引支持使用类列表对象进行多标签维度索引。...,然后返回一个新的 Dataset 对象: >> ds = arr.to_dataset(name = 'ds') >> ds Dimensions: (space...coordinates: x 如果两个 xarray 对象至少有一个没有坐标标签,只要有相同的维度名和大小,同样可以执行对齐操作。
支持 Pcikle 是非常重要的,因为这可以无需安装额外的库就能让你用其他python 模块(比如 multiprocessing) 使用 xarray 对象。...from_dict 方法创建 xarray 对象: >> ds_dict = xr.Dataset.from_dict(d) 字典支持非常灵活的使用 xarray 对象。...使用 open_dataset 方法可以从 netCDF 文件加载数据,并创建 Dataset: >> ds_disk = xr.open_dataset('save.nc') DataArray 对象也可以使用相同的方式存储和读取...默认情况下,xarray 使用 'proleptic_gregorian' 作为日历,两个值之间的最小时间差作为单位。第一个时间值作为标准时间。...注意: 如果你安装了 dask 的话,可以使用 open_mfdataset 合并多个文件: xr.open_mfdataset('../*.nc') 此函数会自动合并并连接多个文件为一个 xarray
meb.read_griddata_from_gds() 函数从 GDS 服务中获取数据,返回 xr.DataArray 对象 t850_grid = meb.read_griddata_from_gds...使用 Meteva 内置的绘图函数 meb.tool.plot_tools.contourf_2d_grid() 绘制等值线图 meb.tool.plot_tools.contourf_2d_grid(...使用 meb.xarray_to_griddata() 函数将要素场对象转为 meb.grid_data() 函数生成的 xr.DataArray 对象 可以看到,对于单个要素场,该函数自动生成了 memeber...计算 计算 024 时效与该时刻分析场的均方根误差 载入数据 整合函数,实现如下功能: 使用 nwpc-data 从 GRIB 2 文件中加载要素场 将返回的要素场转换为 xr.DataArray 对象...计算多个预报数据的指标 加载另一个数据:48 小时预报 file_path = find_local_file( "grapes_gfs_gmf/grib2/orig", start_time
那有个问题便可以提出,为什么不直接使用numpy数组读取地球科学数据,而要使用xarray提供的读取方式?...数据查看 现在我们有了DataArray类的一个实例da,如何对其进行查看呢?...多个盘状垛堞的图标可以查看对应变量的部分数据。如果坐标名称与维度名称重名,则用粗体标记维度名称,而非text形式的*。默认情况下,若在笔记本中直接查看某个xarray对象,直接写对象名称即可。...对于每一个变量都必须要提供维度名称 和DataArray对象或元组语法。...相反,我们需要使用到DataArray对象 x_a = np.arange(1, 4) x_b = np.arange(-1, 3) a = xr.DataArray(np.linspace(0, 1
一个单独的Scene对象代表了一块单独的区域(通常是在某个连续时间段内)。...用户可以把多个(时间或者空间)Scene组合成一个Scene,但是合成之后部分功能可能无法适用。...大多数情况下,用户可以像操作Numpy数组一样,对这些对象进行操作,但得留意元数据是否正常。 更多信息参考xarray.DataArray的说明。...此外,Satpy通过dask.array.Array对象实现多线程计算,从而提高处理性能。 更多信息参考dask和xarray的使用说明。...: https://xarray.pydata.org/en/stable/generated/xarray.DataArray.html#xarray.DataArray [8] dask.array.Array
Dataset xarray.Dataset 是和 DataFrame 相同的多维数组。这是一个维度对齐的标签数组(DataArray)的类字典容器。它用来展示NetCDF文件格式的数据。...DataArray 的 pandas 对象 1D数组或列表 coords:和 data_vars 形式相同的字典 attrs:字典 下面来创建一个 Dataset: >> temp = 15 + 8...使用 DataArray 或 pandas 对象作为参数值: >> xr.Dataset({'bar': foo}) Dimensions: (dim_0: 4, dim...注意:使用 __setitem__ 和 update 将 DataArray 或 pandas 对象赋值给 Dataset时,会和原始数据索引进行自动对齐。...使用 xarray 创建新数据集不会造成性能损失,即使是从文件中加载。创建新对象代替那些存在的”变异“变量,对于理解代码来说是有利的。
t = data_set.t t [37324800...t.sel(isobaricInhPa=850) [1036800 values with...xarray 自带的绘图功能 t.sel(isobaricInhPa=850).plot.contourf( size=5, aspect=2, cmap="coolwarm...高级特性 cfgrib 的 engine 支持 xarray 的所有只读特性,例如: 使用 xarray.open_mddataset() 将多个 GRIB 文件合并到一个单一的 dataset 使用...dask 处理大于内存的数据集 使用 dask.distributed 进行分布式处理 后续会研究如何使用这些特性。
空间绘图神器-Xarray 今天直接给大家介绍一下我最近常用的空间绘图神器-Xarray,之所以给大家推荐这个工具包,是因为我最近在空间可视化课程中免费新增的部分内容,其就是使用Xarray工具绘制的。...先给大家看一下新增的可视化预览图: 可视化课程新增Xarray绘图样例 话不多说,直接给大家介绍一下这个工具,如下: Xarray 是一个基于Python的开源工具包,用于在多维标记数组上进行标签化数据分析...效率:Xarray通过对数据进行坐标对齐,能够高效地处理大型数据集,减少了内存使用和计算时间。...PS:默认的Xarray绘制的图形结果,显然离论文发表需求还有一定的距离,那么如何绘制一幅符合论文出版需求的图表呢? 如何快速学习科研绘图技巧? 如何快速的学习科研论文绘图技巧?...请教专家或同事: 有条件的同学可以跟随一个大佬进行系统学习,向他们寻求指导和建议,可以加速你的学习过程。
当然,大多数时候我们仅需要wrf-python已经提供的诊断函数和其它可调用函数,可能都不会使用到这些API。...场插值到2D平面(指定垂直层)的值 坐标转换 返回经纬度坐标对应的X,Y坐标 网格去栅格 返回去栅格化后的变量,与NCL中的wrf_user_unstagger函数效果相同 numpy 提取 返回 xarray.DataArray...实例中包含的 numpy.ndarray 数组 变量提取 从NetCDF文件或NetCDF文件对象序列中提取变量 辅助绘图 返回文件或是变量的地理边界 原始诊断方法 返回2D网格中一个线上的x,y点...配置方法 如果安装并打开了 xarray 则返回 True 其他 如果输入变量名是时间坐标则返回 True 类 异常 当诊断过程中发生错误是触发异常 CoordPair 类 存储 (x, y) 或 (lat...matplotlib.mpl_toolkits.basemap.Basemap 地图投影对象 Projection 子类 wrf.WrfProj 空投影子类 内部API 提取和诊断方法 返回2D CAPE
距平 下面便提出一个问题:为什么要费尽心思研究变量的距平而非变量的原始数据?若针对于温度这个变量而言,即为什么要使用温度距平(偏离平均值的值)而不非研究绝对温度的变化?...xarray 通过使用Groupby 算法使这些类型的转换变得容易。下面给出了计算去除月份温度差异的海温月数据。...mean()表明对每一个 Rolling 对象取平均。 为了更好的说明 Rolling 的作用,下面举一个简单的例子说明其功能。...对于多个维度的创建,列表的创建方法也与之前的字典创建方法类似 foo = xr.DataArray( np.random.rand(4, 3), dims=("time", "space")...5年滑动平均 我们可以通过下图来理解时间窗是如何操作数据的 ?
由于模式数据非常巨大,一般pc的内存不够大,无法一次性处理如此大的文件,因此这里不再使用xarray库直接读取数据,而是先用glob库,通过glob库提供的方法将上述7个文件导入系统,但这个时候数据还未读取到系统内存...,我们具体来看看它是如何读取数据的。...即为上面的glob抓取的文件,虽说glob一次性抓取了7个nc文件,但是这里xarray读取依然类似于一个文件,参数chunks(数据块)是一个关键,这里的意思是在time维度上一次性读取500MB的数据块...numpy.ndarray 最后,按照时间顺序计算日最大降雨量 pr_max = dset['pr'].max('time', keep_attrs=True) print(pr_max) 输出: <xarray.DataArray...懒人模式的一种,一般来说,xarray非必要的情况下不会计算,但是绘图或者写入netCDF文件则会发生计算操作。
领取专属 10元无门槛券
手把手带您无忧上云