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 排序的软件中使用文件,则必须注意这一点。
我正在 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 排序的软件中使用文件,则必须注意这一点。