我在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中实现了相同的功能,但是一切都正确。
由于
答案 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生成的文件与其他语言不兼容,除非您对维度排序有所了解,并且在阅读书写时可以对变量进行重新排序。但是,如果要使用其他库/维度排序在软件中使用文件,则必须注意这一点。