2017-06-12 1 views
1

Ich habe eine Funktion, die yout_new (5000,1) bei jeder Iteration erzeugt und diese Daten in einer netcdf-Datei speichern und die bei jeder Iteration erzeugten neuen Daten an diese anhängen soll vorhandene Datei. Bei der zweiten Iteration sollte die gespeicherte Variablengröße yout_new (5000,2) sein. Hier ist mein Versuch, der nicht funktioniert. Gibt es einen schönen Weg, es zu tun?Daten an 2-D-Array anhängen Netcdf-Format Matlab

  neq=5000; 
      filename='thrust.nc'; 
      if ~exist(filename, 'file') 
       %% create file 
       ncid=netcdf.create(filename,'NC_WRITE'); 

       %%define dimension 
       tdimID = netcdf.defDim(ncid,'t',... 
          netcdf.getConstant('NC_UNLIMITED')); 
       ydimID = netcdf.defDim(ncid,'y',neq); 
       %%define varibale 
       varid = netcdf.defVar(ncid,'yout','NC_DOUBLE',[ydimID tdimID]); 
       netcdf.endDef(ncid); 

       %%put variables from workspace (i is the iteration) 

       netcdf.putVar(ncid,varid,[ 0 0 ],[ neq 0],yout_new); 

       %%close the file 
       netcdf.close(ncid); 

      else 
       %% open the existing file 
       ncid=netcdf.open(filename,'NC_WRITE'); 

       %Inquire variables 
       [varname,xtype,dimids,natts] = netcdf.inqVar(ncid,0); 
       varid = netcdf.inqVarID(ncid,varname); 

       %Enquire current dimension length 
       [dimname, dimlen] = netcdf.inqDim(ncid,0); 

       % Append new data to existing variable. 

      netcdf.putVar(ncid,varid,dimlen,numel(yout_new),yout_new); 
       netcdf.close(ncid); 

Antwort

1

Es gibt einfachere Funktionen in MATLAB, um mit netCDF umzugehen. Sie lesen über ncdisp, ncINFO, nccreate, ncread, ncwrite. Wenn Sie zu der Frage kommen, haben Sie gesagt, dass Sie zwei Spalten schreiben müssen, ich werde die Anzahl der Spalten als Variable (unendlich) nehmen, jedes Mal wenn Sie die Spalten anhängen können. Überprüfen Sie den folgenden Code:

N = 3 ; % number of columns 
rows = 5000 ; % number of rows 
ncfile = 'myfile.nc' ; % my ncfile name 
nccreate(ncfile,'yout_new','Dimensions',{'row',rows,'col',Inf},'DeflateLevel',5) ; % creat nc file 
% generate your data in loop and write to nc file 
for i = 1:N 
    yout_new = rand(rows,1) ; 
    ncwrite(ncfile,'yout_new',yout_new,[1,i]) ; 
end 

Bitte nicht, dass es nicht zwingend notwendig ist die Anzahl der Spalten als unbegrenzt zu machen, können Sie es auf die gewünschte Zahl an Stelle von inf beheben können.

+0

Danke mate! ... funktioniert gut ... Gibt es eine zusätzliche Option in nccreate, mit der Sie die vorhandene Datei überschreiben können ... derzeit verwende ich, wenn exist() testen und löschen Sie die Datei .. –

+0

Nein _nccreate_ doesn Habe diese Option nicht. Mach weiter mit _exist_ .. –