![](/img/trans.png)
[英]How to add aggregation dimensions to netcdf4 file with the Python library Xarray?
[英]NetCDF4 Python dimensions reordered
我正在使用python中的netCDF4创建NC文件。 该文件非常简单,并包含1和2维的变量(1st dim = N,2nd dim = M)。 但是问题在于,当我读取文件时,二维变量的尺寸会互换,即不是以尺寸(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的问题,而是MATLAB netCDF的“功能”。 来自netcdf.defVar MATLAB文档
该函数与netCDF库C API中的“ nc_def_var”函数相对应,但是由于MATLAB使用FORTRAN样式的排序,所以变化最快的维数排在最前面,而变化最快的维数排在最后。 因此,任何不受限制的尺寸都在尺寸ID列表的最后。 此顺序与C API中的顺序相反。
因此,使用MATLAB生成的文件与其他语言不兼容,除非您对尺寸排序有一定了解,并且在阅读本文时可以对变量进行重新排序。 但是,如果要在使用其他库/维度顺序的软件中使用文件,则必须意识到这一点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.