1

全部,

这可能是一个常见问题解答,但我的 Google-fu 让我失望了。也就是说,我读入了一个由我使用 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,相对湿度:

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,温度呢:

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”的变量?

4

2 回答 2

3

Xarray 支持对变量的属性样式访问,作为交互式使用的便利功能。但是正如您所注意到的,这对于访问与内置方法同名的变量不起作用Dataset(在这种情况下Dataset.T,与 相同Dataset.transpose())。

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

data.get('T')也可以,因为Dataset支持 Python 的 Mapping 接口。就像dict.get,如果找不到键,它旨在访问具有默认值的变量:data.get('not found')将返回None

于 2016-10-28T16:13:56.330 回答
0

我想我想通了:

data.get("T")

现在可能会专门使用它。

于 2016-10-27T12:22:16.340 回答