如何使用Matlab在已填充的netcdf文件中调整数组大小?

时间:2014-12-23 15:03:37

标签: matlab netcdf

我们说我有一个带有大量变量的netcdf文件,其中一个变量被命名为&time;#time;' time'并且大小为500.

nc=netcdf(ncfile, 'write')
size(nc{'time'})
ans =
500

现在我想在同一个变量中存储更长的时间序列(比如750个成员),但我想保持文件的其余部分相同。如何将此变量的维度更改为750,同时将其余变量保留在netcdf文件中?

我尝试简单地附加到数组,这没有给出任何错误,但数组大小没有变化(这意味着它根本没有写入值)

nc{'time'}(750)=1

我试着写一个我尝试将文件放入重新定义模式并更改大小,但无法更改现有变量。

dimid=netcdf.defDim(ncid,'time',750)

Error using netcdflib
The NetCDF library encountered an error during execution of 'defDim' function - 'String match to
name in use (NC_ENAMEINUSE)'.

我无法想象这样做太难了,但我感到惊讶的是它并不像我想象的那么容易。有什么建议?我错过了什么?

1 个答案:

答案 0 :(得分:1)

NetCDF允许尺寸为固定长度或无限长度。你不能真的"调整大小"现有netcdf文件的数组。您只能附加到现有UNLIMITED维度的末尾或创建新文件。因此,首先检查您的netcdf文件是否具有无限时间维度。你可以在Matlab中查看:

ncid = netcdf.open('myfile.nc','WRITE');
dimids = netcdf.inqUnlimDims(ncid)

如果dimids为空或不包含时间,则必须创建一个具有无限时间维度的新文件,并将数据复制到其中。

如果dimids包含时间维度,那么您只需将数据写入其中即可。例如,如果当前的时间值为500,但您希望在索引750处写入时间值23.5,则只需执行以下操作:

timeid = netcdf.inqVarID(ncid,'time')
[varname, xtype, dimids, natts] = netcdf.inqVar(ncid,timeid)
netcdf.putVar(ncid,timeid,750,1,23.5)
netcdf.close(ncid)

是UNLIMITED,目前有500条记录,但你想写入750条记录,你可以继续写下来。