重新排序NetCDF4 Python维度

时间:2015-02-02 10:20:20

标签: python dimensions netcdf

我在python中使用netCDF4创建一个NC文件。该文件非常简单,包括1和2维的变量(第一个dim = N,第二个dim = M)。但问题在于,当我读出文件时,2D变量的尺寸互换,即不是作为维度(N,M)的数据出现,而是作为维度(M,N)出现,而所有1D正如预期的那样,数据以(N,)形式出现。

代码看起来像这样

root = nc.Dataset(filename, 'w', format='NETCDF4')
dimensions = ('N', 'M')

root.createDimension(dimensions[0], None)
root.createDimension(dimensions[1], None)

for field in fields:
        field_def = ...<defintion of field, how many dimensions etc...>
        if field_def[0] == 1: # how many dimensions in this variable
            chunk_size = (200, )
        else:
            chunk_size = (200, 1)

        dim = tuple(dimensions[:field_def[0]])
        var = root.createVariable(field, field_def[3], dimensions=dim,
                                fill_value=0,   chunksizes=chunk_size)

但是当我读取文件时,2D变量的尺寸相反,即块大小为(1,chunk_size),尺寸为(M,N)而不是(N,M)。

任何经历过这样的事情的人,或者可以看出我做错了什么?我已经在Matlab中实现了相同的功能,但是一切都正确。

由于

1 个答案:

答案 0 :(得分:0)

似乎这不是一个python netCDF问题,而是更多的&#34;功能&#34; MATLAB netCDF。来自netcdf.defVar MATLAB文档

此功能对应于&#34; nc_def_var&#34; netCDF中的功能 库C API,但因为MATLAB使用FORTRAN式排序,所以 变化最快的维度是第一个,最慢的是 持续。因此,任何无限维度都在列表中 维度ID。这种排序与C中的顺序相反 API。

因此,使用MATLAB生成的文件与其他语言不兼容,除非您对维度排序有所了解,并且在阅读书写时可以对变量进行重新排序。但是,如果要使用其他库/维度排序在软件中使用文件,则必须注意这一点。