Matlab - Problemas con ncwrite

 
Vista:
sin imagen de perfil

Problemas con ncwrite

Publicado por Atenas (4 intervenciones) el 22/02/2018 02:28:46
Hola a toda la comunidad de programadores y usuarios de matlab:

Estoy trabajando con archivos NetCDF en Matlab2014.
Quiero crear una nueva variable (una matriz de datos) en un archivo netCDF existente. El problema está que no puede ejecutar ncwrite. En el matlab help me da las siguientes instrucciones:

ncwrite(filename,varname,vardata)

(los ejemplos en el matlab help son solo para un valor, y no para una matriz como es mi caso):

nccreate('myfile.nc','pi');
ncwrite('myfile.nc','pi',3.1);
ncwriteatt('myfile.nc','/','creation_time',datestr(now));
% overwrite existing data
ncwrite('myfile.nc','pi',3.1416);
ncdisp('myfile.nc');


y si lo escribo de la siguiente manera:

ncwrite('etopo1-scar.nc','h',j);

Siendo etopo1-scar.nc mi filename, h, mi varname y j mi var data, obtengo:

Error using netcdflib
The NetCDF library encountered an error during execution of 'putVaraDouble' function - 'Start+count exceeds dimension bound (NC_EEDGE)'.

Error in netcdf.putVar (line 84)
netcdflib(funcstr,ncid,varid,varargin{:});

Error in internal.matlab.imagesci.nc/write (line 831)
netcdf.putVar(gid, varid,start, count, varData);

Error in ncwrite (line 75)
ncObj.write(varName, varData, start, stride);


He probado de distintas maneras y lo mas que me he acercado a lo que quiero obtener es si coloco:

ncwrite('etopo1-scar.nc','h',j(1:10801);

Nota: Mi matriz j que contiene los datos de mi variable mide 10801x21601

Con lo anterior obtengo la nueva variable h pero con los valores de j solo en la primera columna, Algo as:

60 9.96e+36 9.96e+36 9.96e+36 ...
54 9.96e+36 9.96e+36 9.96e+36 ...
53 9.96e+36 9.96e+36 9.96e+36 ...
13 9.96e+36 9.96e+36 9.96e+36 ...
70 9.96e+36 9.96e+36 9.96e+36 ...
23 9.96e+36 9.96e+36 9.96e+36 ...
34 9.96e+36 9.96e+36 9.96e+36 ...
. . . .
. . . .
. . . .


(adjunto mi pequeño código de principiante):


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
% Llamo al archivo NetCDF
ncfile='/home/ahumada/roms-3.7/matlab/bathymetry/etopo1-scar.nc';
nc=netcdf(ncfile);
ncdisp(ncfile)
 
% extraigo las variables
 
lat=nc{'lat'}(:,:);
lon=nc{'lon'}(:,:);
topo=nc{'topo'}(:,:);
 
% Creo la nueva variable en el archivo (la variable se crea vacía)...
%  se agrega la variable en el archivo original NetCDF))
 
nccreate('etopo1-scar.nc','h',...
          'Dimensions',{'lon' 21601 'lat' 10801},...
          'Format','classic');
 
% verifico que esté la nueva  variable en el NetCDF      
ncfile='/home/ahumada/roms-3.7/matlab/bathymetry/etopo1-scar.nc';
nc=netcdf(ncfile);
ncdisp(ncfile)
 
lat=nc{'lat'}(:,:);
lon=nc{'lon'}(:,:);
topo=nc{'topo'}(:,:);
h=nc{'h'}(:,:);
 
% creo el contenido de la nueva variable 
j=topo;
 
% relleno la nueva variable
ncwrite('etopo1-scar.nc','h',j(1:10801);
 
 
% verifico el contenido final
ncfile='/home/ahumada/roms-3.7/matlab/bathymetry/etopo1-scar.nc';
nc=netcdf(ncfile);
ncdisp(ncfile)
 
lat=nc{'lat'}(:,:);
lon=nc{'lon'}(:,:);
topo=nc{'topo'}(:,:);
h=nc{'h'}(:,:);


Funciona solo con un dato, por ejemplo si mi VarData es 34, lo escribe en mi matriz j en el punto (m=1, n=1)
Y funciona con un vector (como está en mi script).

Cómo puedo establecer que mi VarData es una matriz y no un solo dato, o un vector?
Y que escriba toda la matriz j en mi variable llamada h (la cual mide lo mismo que j 10801x21601 )

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
>> ncdisp(ncfile)
Source:
           /home/ahumada/roms-3.7/matlab/bathymetry/etopo1-scar.nc
Format:
           classic
Dimensions:
           lat = 10801
           lon = 21601
Variables:
    lat
           Size:       10801x1
           Dimensions: lat
           Datatype:   double
    lon
           Size:       21601x1
           Dimensions: lon
           Datatype:   double
    topo
           Size:       21601x10801
           Dimensions: lon,lat
           Datatype:   double
    h
           Size:       21601x10801
           Dimensions: lon,lat
           Datatype:   double

Gracias de antemano y espero haberme explicado...
Saludos cordiales

Mar.Mo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Problemas con ncwrite

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 22/02/2018 14:17:54
Cuando haga su pregunta, no debería minimizar lo que está preguntando. "(adjunto mi pequeño código de principiante):" . Quizás algunos no entiendan lo que ud. esta haciendo y otros entiendan lo que usted haciendo.


Saludos
JOSE JEREMIAS CABALLERO
Asesor de Proyectos con Matlab
Servicios de programación matlab


http://matlabcaballero.blogspot.com
https://www.facebook.com/matlabcaballero
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problemas con ncwrite

Publicado por Atenas Martinez (4 intervenciones) el 23/02/2018 19:40:24
Hola Jose, muchas gracias por el consejo, lo tomaré en cuenta para la próxima vez.
Saludos.

Mar.Mo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar