我使用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}
的数据。
我所看到的解决这个问题的方法是:
Variable
/ height
组合使用单独的一维direction
。Variable
,即所有可能的组合,并且对于某些组合使用所有值都会被掩盖。Variable
。是否还有其他方法,有哪些原因,既有原则性又有实用性,更倾向于采用一种方法而不是另一种方法?
答案 0 :(得分:1)
基本上你的答案2是正确答案。 NETCDF文件是网格化文件,因此数据描述的自然结构是定义三个维度,时间,高度和方向。对于不存在数据的数组条目,您需要将数据设置为等于元数据定义的值:
_FillValue
这意味着正在读取数据的任何软件(如R,python,ncview等)都会将这些点指定为“缺失”。
有关定义缺失值的更多详细信息,请参阅: http://www.unidata.ucar.edu/software/netcdf/docs/fill_values.html
答案 1 :(得分:0)
在阅读元数据约定时,我遇到了另一个选项:height
和direction
变量的“compression by gathering”变为单个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)]
值之间的关系明确:isAvailable(url)
。
鉴于似乎没有图书馆支持,它不一定是所有方面最方便的选择。但是,考虑到它是以元数据标准“NetCDF Climate and Forecast (CF) Metadata Conventions”进行编码,它似乎是合理的选择。