0

我正在使用 netCDF4 存储多维数据。例如,数据具有三个维度,time = [0, 1, 2]height = [10, 20]direction = [0, 120, 180, 240, 300],但并非所有组合(网格点)都有数据。在我们的示例中,这仅限于height/ -direction组合。即,假设height == 10我们有数据只为direction in {0, 120, 240}height == 20只为direction in {120, 180, 300}

我看到的处理这个问题的方法是:

  1. Variable为每个height/ -组合使用单独的一维direction
  2. 在笛卡尔积上使用单个三维Variable,即所有可能的组合,并接受这样一个事实,即对于某些组合,所有值都被屏蔽了。
  3. 对每个高度使用不同的位置尺寸定义,对每个高度使用二维Variable

是否有其他方法以及在原则上和实际上偏爱一种方法而不是另一种方法的原因是什么?

4

2 回答 2

1

基本上你的答案 2 是正确的。NETCDF 文件是网格文件,因此数据描述的自然结构是定义三个维度,时间、高度和方向。对于不存在数据的数组条目,您需要将数据设置为等于元数据定义的值:

_FillValue

这意味着任何正在读取数据的软件(例如 R、python、ncview 等)都会将这些点分配为“缺失”。

有关定义缺失值的更多详细信息,请参见: http ://www.unidata.ucar.edu/software/netcdf/docs/fill_values.html

于 2017-05-16T21:33:57.707 回答
0

在阅读元数据约定时,我遇到了另一个选项:'<a href="http://cfconventions.org/cf-conventions/v1.6.0/cf-conventions.html#compression-by-gathering" rel="nofollow noreferrer">通过将heightdirection变量收集到单个location variable.

这在玩具示例中如何工作?首先将所有位置收集到一个一维列表中:

0: 10,0   *
1: 10,120 *
2: 10,180
3: 10,240 *
4: 10,300
5: 20,0
6: 20,120 *
7: 20,180 *
8: 20,240
9: 20,300 *

然后location = [0, 1, 3, 6, 7, 9],数据仅使用两个维度定义location, 具有compress: "height direction"属性, 和time。可能最好添加一个二维辅助坐标变量,以使位置索引和height/direction值之间的关系显式:height_direction = [(10,0), (10,120), (10,240), (20,120), (20,180), (0,300)].

鉴于似乎没有库对此的支持,它不一定是所有方面最方便的选择。但是,考虑到它是在元数据标准中编码的,“<a href="http://cfconventions.org/cf-conventions/v1.6.0/cf-conventions.html" rel= “nofollow noreferrer">NetCDF 气候和预报 (CF) 元数据约定”。

于 2017-05-26T12:46:39.000 回答