如何读取一个称为"T"的变量.用xarray? [英] How to read a variable called "T" with xarray?

查看:88
本文介绍了如何读取一个称为"T"的变量.用xarray?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

全部

这可能是一个常见问题解答,但是我的Google-fu使我失败了.即,我读入了由我使用xarray a la的天气模型生成的文件:

This might be a FAQ, but my Google-fu has failed me. Namely, I read in a file generated by a weather model I work on with xarray a la:

In [4]: data = xr.open_dataset("test_old.nc4")

In [5]: data
Out[5]: 
<xarray.Dataset>
Dimensions:  (lat: 49, lev: 48, lon: 96, time: 1)
Coordinates:
  * lon      (lon) float64 -180.0 -176.2 -172.5 -168.8 -165.0 -161.2 -157.5 ...
  * lat      (lat) float64 -90.0 -86.25 -82.5 -78.75 -75.0 -71.25 -67.5 ...
  * lev      (lev) float64 1e+03 975.0 950.0 925.0 900.0 875.0 850.0 825.0 ...
  * time     (time) datetime64[ns] 2000-04-15
Data variables:
    H        (time, lev, lat, lon) float64 nan nan nan nan nan nan nan nan ...
    O3       (time, lev, lat, lon) float64 nan nan nan nan nan nan nan nan ...
    OMEGA    (time, lev, lat, lon) float64 nan nan nan nan nan nan nan nan ...
    PHIS     (time, lat, lon) float64 2.605e+04 2.605e+04 2.605e+04 ...
    PS       (time, lat, lon) float64 6.984e+04 6.984e+04 6.984e+04 ...
    QI       (time, lev, lat, lon) float64 nan nan nan nan nan nan nan nan ...
    QL       (time, lev, lat, lon) float64 nan nan nan nan nan nan nan nan ...
    QV       (time, lev, lat, lon) float64 nan nan nan nan nan nan nan nan ...
    RH       (time, lev, lat, lon) float64 nan nan nan nan nan nan nan nan ...
    SLP      (time, lat, lon) float64 9.973e+04 9.973e+04 9.973e+04 ...
    T        (time, lev, lat, lon) float64 nan nan nan nan nan nan nan nan ...
    U        (time, lev, lat, lon) float64 nan nan nan nan nan nan nan nan ...
    V        (time, lev, lat, lon) float64 nan nan nan nan nan nan nan nan ...

到目前为止,太好了. (请注意,我已经删除了空间属性).现在,我们指的是相对湿度RH:

So far, so good. (Note I've removed the attributes for space). Now, let's refer to RH, the relative humidity:

In [8]: data.RH
Out[8]: 
<xarray.DataArray 'RH' (time: 1, lev: 48, lat: 49, lon: 96)>
array([[[[             nan,              nan,              nan, ...,
                       nan,              nan,              nan],
         [             nan,              nan,              nan, ...,
                       nan,              nan,              nan],
         [             nan,              nan,              nan, ...,
                       nan,              nan,              nan],
         ..., 
         [  9.84245896e-01,   9.84482586e-01,   9.84114528e-01, ...,
            9.82491255e-01,   9.83228445e-01,   9.83820796e-01],
         [  9.84869719e-01,   9.86230493e-01,   9.87663150e-01, ...,
            9.81099427e-01,   9.82316971e-01,   9.83569324e-01],
         [  9.83583868e-01,   9.83583868e-01,   9.83583868e-01, ...,
            9.83583868e-01,   9.83583868e-01,   9.83583868e-01]],
<snip>
         [  8.91117509e-07,   8.92956564e-07,   8.92726121e-07, ...,
            8.90103763e-07,   8.89725982e-07,   8.90051581e-07],
         [  9.32031071e-07,   9.32695400e-07,   9.33462957e-07, ...,
            9.30619990e-07,   9.30997828e-07,   9.31466616e-07],
         [  9.39349945e-07,   9.39349945e-07,   9.39349945e-07, ...,
            9.39349945e-07,   9.39349945e-07,   9.39349945e-07]]]])
Coordinates:
  * lon      (lon) float64 -180.0 -176.2 -172.5 -168.8 -165.0 -161.2 -157.5 ...
  * lat      (lat) float64 -90.0 -86.25 -82.5 -78.75 -75.0 -71.25 -67.5 ...
  * lev      (lev) float64 1e+03 975.0 950.0 925.0 900.0 875.0 850.0 825.0 ...
  * time     (time) datetime64[ns] 2000-04-15
Attributes:
    long_name: relative_humidity_after_moist
    units: 1
    fmissing_value: 1e+15
    standard_name: relative_humidity_after_moist
    vmin: -1e+15
    vmax: 1e+15
    valid_range: [ -9.99999987e+14   9.99999987e+14]

太好了!现在,温度T呢?

Great! Now, what about T, the temperature:

In [12]: data.T
Out[12]: 
<xarray.Dataset>
Dimensions:  (lat: 49, lev: 48, lon: 96, time: 1)
Coordinates:
  * lon      (lon) float64 -180.0 -176.2 -172.5 -168.8 -165.0 -161.2 -157.5 ...
  * lat      (lat) float64 -90.0 -86.25 -82.5 -78.75 -75.0 -71.25 -67.5 ...
  * lev      (lev) float64 1e+03 975.0 950.0 925.0 900.0 875.0 850.0 825.0 ...
  * time     (time) datetime64[ns] 2000-04-15
Data variables:
    H        (lon, lat, lev, time) float64 nan nan nan nan nan nan nan nan ...
    O3       (lon, lat, lev, time) float64 nan nan nan nan nan nan nan nan ...
    OMEGA    (lon, lat, lev, time) float64 nan nan nan nan nan nan nan nan ...
    PHIS     (lon, lat, time) float64 2.605e+04 1.887e+04 3.46e+03 207.6 0.0 ...
    PS       (lon, lat, time) float64 6.984e+04 7.764e+04 9.496e+04 ...
    QI       (lon, lat, lev, time) float64 nan nan nan nan nan nan nan nan ...
    QL       (lon, lat, lev, time) float64 nan nan nan nan nan nan nan nan ...
    QV       (lon, lat, lev, time) float64 nan nan nan nan nan nan nan nan ...
    RH       (lon, lat, lev, time) float64 nan nan nan nan nan nan nan nan ...
    SLP      (lon, lat, time) float64 9.973e+04 9.937e+04 9.905e+04 ...
    T        (lon, lat, lev, time) float64 nan nan nan nan nan nan nan nan ...
    U        (lon, lat, lev, time) float64 nan nan nan nan nan nan nan nan ...
    V        (lon, lat, lev, time) float64 nan nan nan nan nan nan nan nan ...

哦,亲爱的.我认为它在做什么是移调.如何精确地引用xarray数据集中的一个名为"T"的变量?

Oh dear. I think what it's doing is a transpose. How exactly can one refer to a variable called "T" in an xarray dataset?

推荐答案

Xarray支持对变量进行属性样式访问,这是一种便于交互使用的功能.但是,正如您已经注意到的那样,这无法访问与内置Dataset方法具有相同名称的变量(在本例中为

Xarray supports attribute-style access for variables as a convenience feature for interactive use. But as you've noticed, this doesn't work to access a variable with the same name as a built-in Dataset method (in this case Dataset.T, which is the same as Dataset.transpose()).

访问变量的可靠方法是使用字典式访问data['T'].

The reliable way to access variables is to use dictionary-style access, data['T'].

data.get('T')也可以使用,因为Dataset支持Python的Mapping接口.像dict.get一样,如果找不到键,它也应用于使用默认值访问变量:data.get('not found')将返回None.

data.get('T') also works, because Dataset supports Python's Mapping interface. Like dict.get, it's intended for accessing variables with a default value if the key is not found: data.get('not found') will return None.

这篇关于如何读取一个称为"T"的变量.用xarray?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆