NetCDF4 Python 维度重新排序

NetCDF4 Python dimensions reordered

我正在 python 中使用 netCDF4 创建 NC 文件。该文件非常简单,包括 1 维和 2 维变量(第一个暗淡=N,第二个暗淡=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)

但是当我读取文件时,二维变量的维度是相反的,即块大小是 (1, chunk_size) 并且维度是 (M, N) 而不是 (N, M)。

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

谢谢

这似乎不是 python netCDF 问题,而是 "feature" MATLAB netCDF 问题。来自 netcdf.defVar MATLAB 文档

该函数对应netCDF中的"nc_def_var"函数 库 C API,但是因为 MATLAB 使用 FORTRAN 风格的排序,所以 变化最快的维度首先出现,最慢的维度出现 最后的。因此,任何无限维度都在列表的最后 维度 ID。此顺序与 C 中的顺序相反 API.

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