什么是“未索引维度”以及为什么坐标*为空*?

What are “unindexed dimensions” and why are coordinates *empty*?

我正在读取 NetCDF 文件,我得到 Unindexed dimensions。这是什么意思,我应该担心吗?跟坐标*empty*有关吗?这是否意味着源文件中的某些内容不整洁?

In [33]: ds
Out[33]: 
<xarray.Dataset>
Dimensions:                     (hirs-n17_nx: 7, hirs-n17_ny: 7, hirs-n18_nx: 7, hirs-n18_ny: 7, matchup_count: 11969)
Coordinates:
    *empty*
Unindexed dimensions:
    hirs-n17_nx, hirs-n17_ny, hirs-n18_nx, hirs-n18_ny, matchup_count
Data variables:
(...)
    hirs-n18_counts_ch12        (matchup_count, hirs-n18_ny, hirs-n18_nx) float64 -2.147e+09 ...
(...)

In [35]: ds["hirs-n17_radiance_ch12"]
Out[35]: 
<xarray.DataArray 'hirs-n17_radiance_ch12' (matchup_count: 11969, hirs-n17_ny: 7, hirs-n17_nx: 7)>
[586481 values with dtype=float64]
Unindexed dimensions:
    matchup_count, hirs-n17_ny, hirs-n17_nx
Attributes:
    units: mW m^-2 sr^-1 cm

"Unindexed dimensions" 只是没有关联坐标变量的维度。更好的章节标题可能是 "Dimensions without coordinates"。这并没有本质上的错误:有时维度没有有意义的坐标值,而 xarray 处理得很好。

这是 repr 中 xarray objects 的新部分。从 v0.9.0 开始,xarray 数据模型中的 coordinates for dimensions are now optional,而不是具有 [0, 1, 2, ..., N-1].

形式默认值的 filled-in

旧 behavior/repr (xarray v0.8.2):

>>> ds = xarray.Dataset({'foo': (('x',), [1, 2, 3])})
>>> ds
<xarray.Dataset>
Dimensions:  (x: 3)
Coordinates:
  * x        (x) int64 0 1 2
Data variables:
    foo      (x) int64 1 2 3
>>> 'x' in ds.coords
True

新 behavior/repr (xarray v0.9.0):

>>> ds = xarray.Dataset({'foo': (('x',), [1, 2, 3])})
>>> ds
<xarray.Dataset>
Dimensions:  (x: 3)
Coordinates:
    *empty*
Unindexed dimensions:
    x
Data variables:
    foo      (x) int64 1 2 3
>>> 'x' in ds.coords
False

很高兴您提出了这个问题。我们最近一直在调整 repr(参见 https://github.com/pydata/xarray/issues/1199)以尝试以最清晰的方式传达数据模型的这一新方面,但我们可能还没有做到正确。非常欢迎提出改进建议(请对链接的 GitHub 问题发表评论)。